我已经创建了两个矩形,可以随其中一个移动并跳起,另一个静止在窗体上作为障碍物。 我希望障碍物作为障碍物(或者墙壁,如果你愿意的话),基本上我想让活动矩形在其右侧碰撞障碍物左侧(等等)时停止。二维矩形在碰撞时应该停止移动
我发现这个代码如何不检测碰撞(因为它显然更容易不进行碰撞检测)的一篇文章中两个矩形之间:
OutsideBottom = Rect1.Bottom < Rect2.Top
OutsideTop = Rect1.Top > Rect2.Bottom
OutsideLeft = Rect1.Left > Rect2.Right
OutsideRight = Rect1.Right < Rect2.Left
//or
return NOT (
(Rect1.Bottom < Rect2.Top) OR
(Rect1.Top > Rect2.Bottom) OR
(Rect1.Left > Rect2.Right) OR
(Rect1.Right < Rect2.Left))
但我不知道如何实现它。我有一个名为“player1.left”的bool,当我按下键盘上的'A'('D'向右移动,'W'跳转)时,它变为true,当true时将矩形移动10个像素到(在Timer_Tick事件中)。
编辑:
“rect1.IntersectsWith(RECT2)” 的作品来检测碰撞。但是如果我想让可移动的矩形停止向右移动(但仍然能够跳跃并移动到左侧),如果它的右侧与障碍左侧碰撞,我将如何使用它(if语句中应该包含的内容)方(等等)?
在那个Rectangle实现中有一个'Rectangle.Intersects()'方法吗?如果是这样:'bool collided = rect1.Intersects(rect2);' – itsme86 2014-10-17 15:03:23
“,因为它显然更容易检测不到碰撞”。不会说这更容易,但更快。它停止检查其余的值。更快速地连续检查每个更新的1个条件与4. – TyCobb 2014-10-17 15:26:55