【发布时间】:2014-12-13 04:54:18
【问题描述】:
我已经创建了两个矩形,你可以用其中一个移动和跳跃,另一个作为障碍物静止在 Form 上。 我希望障碍物作为障碍物(或墙壁,如果你愿意),基本上我希望可移动矩形在其右侧与障碍物的左侧碰撞时停止(等等)。
我发现这段代码如何不检测文章中两个矩形之间的碰撞(因为不检测碰撞显然更容易):
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”的布尔值,当我按下键盘上的“A”时它变为真(“D”向右移动,“W”跳转)当它为真时,它将矩形移动 10 个像素到left(在 Timer_Tick 事件中)。
编辑:
"rect1.IntersectsWith(rect2)" 用于检测碰撞。但是,如果我想让可移动矩形停止向右移动(但仍然能够跳跃和向左移动),如果它的右侧与障碍物的左侧碰撞,我将如何使用它(if 语句中应该包含什么)侧面(等等)?
【问题讨论】:
-
Rectangle.Intersects()实现中是否有Rectangle.Intersects()方法?如果是这样:bool collided = rect1.Intersects(rect2); -
“因为不检测碰撞显然更容易”。不会说它更容易,但更快。它停止检查其余的值。每次更新持续检查 1 个条件比 4 个更快。
标签: c# collision detection rectangles