AS3检查数组中是否有任何对象被命中

时间:2015-06-08 09:33:53

标签: arrays actionscript-3 flash

我有一系列平台,我正在尝试对抗玩家。我还有一个名为 onGround 的布尔变量,它附加到播放器。

我需要能够根据播放器是否正在击中阵列中的平台来切换 onGround 。很容易检查播放器是否使用以下内容进入平台

//loop through array
var platform = platformArray[i];

if(player.hitTestObject(platform)){ onGround = true;}

不幸的是,检查玩家是否没有进入平台会引起很多困惑。即使有:

if(!player.hitTestObject(platform)){ onGround = false;}

由于逻辑原因,如果玩家将触摸平台,它也不会触及另一个平台,上述线路仍会执行。 onGround 将在true和false之间不断交换。

我需要能够检查阵列中的所有平台是否同时被击中。我自己的几十个解决方案都让我失望了。玩家是否在阵列中击中至少1个平台,或者根本没有?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的第一种方法就足够了。您只需要在循环后检查onGround是否为假,即在针对所有平台进行测试之后。

// set initial value of onGround to false
onGround = false;

//loop through array
var platform = platformArray[i];

if (player.hitTestObject(platform)) {
    onGround = true;
    break;
}

// after loop
if (onGround) {
    // at least one is hit
} else {
    // none is hit
}

更好的方法是将逻辑包装在函数中。像这样:

function isAnyPlatformHit(platformArray, player):Boolean {
    for (var i:int = 0; i < platformArray.length; i++) {
        var platform = platformArray[i];

        if (player.hitTestObject(platform)) {
            return true;
        }
    }

    return false;
}

if (!isAnyPlatformHit(platformArray, player)) {
    // none hit
}