我已經創建了兩個矩形,可以隨其中一個移動並跳起,另一個靜止在窗體上作爲障礙物。 我希望障礙物作爲障礙物(或者牆壁,如果你願意的話),基本上我想讓活動矩形在其右側碰撞障礙物左側(等等)時停止。二維矩形在碰撞時應該停止移動
我發現這個代碼如何不檢測碰撞(因爲它顯然更容易不進行碰撞檢測)的一篇文章中兩個矩形之間:
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