[英]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.