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
}
我有一系列平台正在针对玩家进行测试。我还有一个名为 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
}