2016-04-24 49 views
1

我讓這個小遊戲類似於飛揚的小鳥,可以使用鼠標和鍵盤上下飛行。對象在Matlab上碰撞時如何打破遊戲?

我不會發布完整的代碼,因爲這是一個大學項目,我不希望被任何可能的抄襲抓住。

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

的矩形作爲

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)與牆壁(其他物體)碰撞時,我該如何製作這樣的遊戲?

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

回答

2

如果您安裝了映射工具箱,它會提供一個名爲polyxpoly的函數,它允許您與polylines相交,因此您可以找到整個矩形與每個牆的交點,並且您不必擔心分割每條邊的矩形。

在這裏,你有一個壁碰撞的一個完整的工作示例:

% 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 

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

Collision detection flappy bird