好的,我的Main Class中有一个如下所示的数组:
objectArray:Array = [ ];
我有三个功能可以创建不同的项目,例如硬币,敌人,心脏等。这些添加的项目中的每一项都会被推送到objectArray
。我正在尝试编写这个功能,可以针对任何这些对象来检测我的项目符号:
private function checkCollisions() :void{
var bullet:MovieClip;
for (var j:int = 0; j < objectArray.length; j++){
object = objectArray[j];
for(var i:int = 0; i < bulletArray.length; i++){
bullet = bulletArray[i];
if (objectArray[j].hitTestPoint(bullet.x, bullet.y, true)) {
container.removeChild(bullet);
bulletArray.splice(i,1);
if (objectArray[j] == Enemy[j]){
container.removeChild(objectArray[j]);
objectArray.splice(j,1);
trace("enemy hit");
}
}
}
}
}
问题来自这一部分:
if (objectArray[j] == Enemy[j]){ \\problem
container.removeChild(objectArray[j]);
objectArray.splice(j,1);
trace("enemy hit");
}
我一直试图找到一种方法来测试针对特定值(例如“敌人”)的Hittested对象,这样我就可以根据被击中的对象产生不同的结果。无论我尝试什么样的测试组合,我似乎都无法做出回应。当我追踪objectArray[j]
时,会产生[object Enemy]
。是否有不同的方法来测试数组值?
答案 0 :(得分:2)
听起来您想要测试objectArray[j]
中的对象是否为Enemy
对象。您可以使用is
运算符执行此操作:
if (objectArray[j] is Enemy)
{
container.removeChild(objectArray[j]);
trace ("enemy hit");
}
修改强>
此外,您可能希望以相反的顺序迭代项目符号/对象数组,因为您可能在迭代时从数组中删除条目。
for (var j:int = objectArray.length -1; j >= 0; j--){
// then do the same with the bullet array