簡體   English   中英

當物體在Matlab上碰撞時,我該如何中斷游戲?

[英]How do I break the game when objects collide on Matlab?

我制作了這款小游戲,類似於飄揚的小鳥,在那里人們可以使用鼠標和鍵盤上下飛。

我不會發布完整的代碼,因為這是一個大學項目,並且我不想因任何any竊而被抓住。

我所做的是,我使用了兩個對象:

一樣的矩形:

r= rectangle('Position', pos, 'curvature', [0.99,0.1], 'FaceColor', 'r', 'EraseMode','xor');

粗線代表牆壁:

line([ 100 100], [10 400], 'color', 'm', 'LineWidth', 10, 'EraseMode', 'background')

我的問題:

問題是鳥兒穿過牆壁,就像牆壁是透明的一樣。 可以想象,當鳥撞到牆壁(而不穿過它們)時,我想破壞游戲並顯示類似“ 游戲結束 ”的內容。 當鳥(對象1)與牆壁(其他對象)碰撞時,如何使游戲中斷?

非常感謝您閱讀我的問題!

您想使用相交算法來檢查壁線之一是否與矩形相交(四次檢查)。 矩形基本上還由4條線組成,這意味着您應該對照4條壁線檢查4條矩形線(如果使用線-線-相交算法)。

例如,檢查以下主題: 如何找到直線和矩形之間的交點?

基本上,這是一個簡單的數學方程式,請參見https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection

如果安裝了“制圖工具箱”,則它提供了一個稱為polyxpoly的函數,該函數可讓您與折線相交,因此您可以找到整個矩形與每個牆的交點,而不必擔心會拆分矩形的每個邊緣。

這里有一個與牆碰撞的完整示例:

% Bird (rectangle).
% Position.
xr = 30;
yr = 100;

% Length of rectangle edges.
deltaxr = 10;
deltayr = 10;

% Vector for rectangle object.
vr = [xr, yr, deltaxr, deltayr];

% Bird polyline.
a = [xr, yr];
b = [xr + deltaxr, yr];
c = [xr + deltaxr, yr + deltayr];
d = [xr, yr + deltayr];
r = [a; b; c; d];

% Wall (line).
% Wall polyline.
l = [40 0; 40 105];

% Draw objects.
r1 = rectangle('Position',vr,'LineWidth',2);
line(l(:,1), l(:,2),'LineWidth',2,'Color','r');
axis equal;

% Find intersections.
[xi,yi] = polyxpoly(r(:,1),r(:,2),l(:,1),l(:,2));

% Are there any intersections? If so, GAME OVER.
if ~isempty(xi)
    % Stop the game and display GAME OVER.
    text(xr-20,yr-20,'GAME OVER','Color','b','FontSize', 20);
end

您可以嘗試在鳥類的不同位置測試碰撞檢測:

碰撞檢測飛鳥

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM