我有一系列平台,我正在尝试对抗玩家。我还有一个名为 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个平台,或者根本没有?有什么想法吗?
答案 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
}