根据hitTest对象测试数组的值

时间:2012-08-02 20:53:12

标签: actionscript-3 collision-detection hittest

好的,我的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]。是否有不同的方法来测试数组值?

1 个答案:

答案 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