当物体在Matlab上碰撞时如何打破游戏?

时间:2016-04-24 06:54:38

标签: 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')

我的问题:

问题是穿过墙壁,好像墙壁是透明的。正如你可以想象的那样,当鸟儿撞到墙上时(不是通过它们),我想要打破游戏并展示类似<#> 游戏结束&#34;之类的东西。当鸟(物体1)与墙壁(其他物体)碰撞时,如何使我的游戏中断?

非常感谢您阅读我的问题!

2 个答案:

答案 0 :(得分:2)

您需要使用交叉算法来检查其中一条墙线(检查四次)与矩形的交点。矩形基本上也由4行组成,这意味着您应该检查4条矩形线与4条墙线(如果使用线 - 线交叉算法)。

E.g。检查此主题: How to find the intersection point between a line and a rectangle?

这基本上是一个简单的数学方程式,请参阅https://en.wikipedia.org/wiki/Line%E2%80%93line_intersection

答案 1 :(得分:2)

如果您安装了Mapping Toolbox,它会提供一个名为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