2015-04-01 71 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