AS3 HitTestPoint停止使用Array对象

时间:2015-04-01 08:17:42

标签: actionscript-3

播放器在几帧之后落在地面DisplayObject。我怎么能阻止他这样做呢?

在我的游戏主循环中,每个帧都调用此函数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;
    }

1 个答案:

答案 0 :(得分: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结束,因为检查的最后一个块不是与玩家相交的块。所以玩家会摔倒。

您需要在break之后添加Bumping = true语句才能退出循环。