2011-12-16 61 views
1

的colision是工作,但它的一些錯誤,因爲玩家theese線只是站在仍處於起始位置X10 Y10我的球員碰撞無法正常工作

for (int i = 0; i < sprites.Length; i++) 
      { 
       if (player.Top > sprites[i].Top && player.Bottom < sprites[i].Top) //Checking for intersection at the top of the player 
       { 
        player_Collision1 = true; //Found collision 
       } 

       else if (player.Bottom > sprites[i].Top && player.Bottom < sprites[i].Bottom) //Checking for intersection at the bottom of the player 
       { 
        player_Collision2 = true; //Found collision 
       } 

       else if (player.Left > sprites[i].Right && player.Left < sprites[i].Left) //Checking for intersection at the left of the player 
       { 
        player_Collision3 = true; //Found collision 
       } 

       else if (player.Right > sprites[i].Left && player.Right < sprites[i].Right)//Checking for intersection at the right of the player 
       { 
        player_Collision4 = true; //Found collision 
       } 
      } 

林使用XNA的矩形和球員的名字一個矩形和精靈是玩家可以碰撞的所有矩形陣列,XNA矩形可以讓你獲得矩形兩側的座標,就像你所說的那樣:player.Top player.Bottom等等。

+0

你知道XNA有一個內置的`Intersects`方法嗎?如果您定義了兩個矩形,則可以使用它來查看它們是否重疊。 http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.rectangle.intersects.aspx – 2011-12-16 17:03:22

+0

我需要不同的碰撞發生取決於雙方.. – Rakso 2011-12-16 17:04:16

回答

2

邏輯真的搞砸了。第一個if永遠不會是真實的,因爲player.top不能低於sprite.top和sprite.top之上的player.bottom。我認爲你的意思是,如果(player.Top > sprites[i].Top && player.Bottom < sprites[i].Bottom)即使如此,當它們不會相互碰撞時,它會被評估爲真。看看這張照片爲什麼。您還需要檢查X軸以確定正確的碰撞。

其他if s與第一個問題相同。無論是在底部/頂部還是頂部/底部進行比較,並在沒有碰撞時返回true。話雖如此,我正在努力做一個窮人的「視線」場景,你只想看看玩家是否站在精靈可以「看到」的位置,我錯了。

我建議看看App Hub網站上提供的platformer starter kit以及其上的一些documention。具體來說,看一下碰撞檢測(在Player.cs CheckCollision()...或HandleCollision()中,我確定了一個確切的名字,它應該很明顯)。你將能夠看到他們如何確定玩家碰撞的方向。他們用它來看看一個玩家是否可以跳過一個平臺,但不會落在平臺上。