AS3 - 'for each'循环中的数组命中测试仅适用于数组

时间:2016-06-08 11:14:49

标签: arrays actionscript-3 flash foreach hittest

我正在尝试在AS3中构建一个平台游戏,方法是将我的Pl​​atform类的所有实例放入一个Array中,然后使用hitTestObject为每个循环运行一个来检查玩家是否正在触摸其中任何一个。

我的问题是,虽然玩家会正确地做出反应来触摸阵列中的每个平台(即停止下降并将y位置设置到平台顶部),但我只能在站在最后一个位置时执行跳跃功能阵列中的平台。

我对ActionScript相当新,所以我不知道为什么会这样 - 肯定'for each'循环意味着每个平台应该以相同的方式行事?一些代码肯定适用于每个平台,但由于某种原因不是允许玩家跳跃的。

如果有人知道为什么会这样,并且可以提供解决方案,我将非常感激。这已经让我上了几天了。

这是相关代码。在输入框架侦听器上调用该函数。

private function collisionTestPlatforms (event:Event) : void {
        for each (var i:Platform in aPlatforms) {
            if (player.hitTestObject(i)) {
                Player.touchingGround = true;
                player.y = i.y - 25;
                Player.yVelocity = 0;
            } else {
                Player.touchingGround = false;
            }
        }
    }

非常感谢!

1 个答案:

答案 0 :(得分:1)

类似于@ DodgerThud的建议,您可以将条件else带出循环:

private function collisionTestPlatforms (event:Event) : void {
    //By default, the player is not touching the ground until we find 
    // a collision with one of the platforms
    Player.touchingGround = false;
    for each (var i:Platform in aPlatforms) {
        if (player.hitTestObject(i)) {
            Player.touchingGround = true;
            player.y = i.y - 25;
            Player.yVelocity = 0;
        }
    }
}