2015-04-01 76 views
0

玩家在幾幀後落在地面DisplayObject。我怎麼能阻止他這樣做?AS3 HitTestPoint停止使用Array對象

這個函數在我遊戲的主循環中每幀調用ENTER_FRAME

public function groundCollision() { 
     for each(var moveG: DisplayObject in groundMoveArray) { 
      if (moveG.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)) { 
       Bumping = true; 
      } else { 
       Bumping = false; 
      } 
     } 
     if (Bumping == true) { 
      if (ySpeed >= 0) { 
       ySpeed = 0; 
      } 
      if (JumpPressed) { 
       ySpeed = jumpConstant; 
      } 
     } else { 
      ySpeed += gravityConstant; 
     } 
     ySpeed *= friction; 
     playerY += ySpeed; 
     player.y = playerY; 
    } 
+0

我現在已經實現了。一旦第二個地面模塊進入舞臺,它就停止工作。但仍然不知道爲什麼。 – DerJaeger 2015-04-01 08:50:11

回答

0
for each(var moveG: DisplayObject in groundMoveArray) { 
    if (moveG.hitTestPoint(player.x + downBumpPoint.x, player.y + downBumpPoint.y, true)) { 
     Bumping = true; 
    } else { 
     Bumping = false; 
    } 
} 

在這裏,您查看球員的對抗中循環中的所有地面塊。玩家一次只能與一個街區交叉。所以如果它與一個街區相交,那麼它不會與另一街區相交。但是,當您循環檢查時,您的Bumping標誌將被分配上一個檢查塊的結果。因此,如果有兩個街區,並且玩家與第一個街區相交,則您的支票將以Bumping == false完成,因爲所選的最後一個街區不是與該玩家相交的街區。所以玩家會掉下來。

您需要在Bumping = true之後添加break語句才能退出循環。

+0

謝謝,對於遲到的回覆感到抱歉。 – DerJaeger 2015-04-24 07:25:59