AS3 检查数组中是否没有对象被 hitTested

AS3 Check if no object in an array is being hitTested

我有一系列平台正在针对玩家进行测试。我还有一个名为 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 个平台,或者 none?有什么想法吗?

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

// 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
}