0

好的,我的主类中有一个数组,如下所示:

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");
}

我一直在尝试寻找一种方法来测试正在被命中的对象是否针对某个值(例如“敌人”)进行测试,以便我可以根据被命中的对象类型产生不同的结果。无论我尝试哪种测试组合,我似乎都无法让它响应。当我跟踪objectArray[j]时,它会产生[object Enemy]结果。有不同的测试数组值的方法吗?

4

1 回答 1

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
于 2012-08-02T22:10:01.557 回答