AS3子弹拆除

时间:2012-10-21 03:41:49

标签: actionscript-3

大家。

我试图让我的子弹实例在离开屏幕后被删除,但我明白了:

Error 1061: Call to a possibly undefined method removeChild through a reference with static type __AS3__.vec:Vector.<Bullet>.

这是错误指向的地方:

private function manageBullets(event:Event):void {

    for each(var i in bManager.bulletVector){

        if (i.y < -20) {

            bManager.removeChild(i);     //This line
            bManager.bulletVector = bManager.bulletVector.splice(bManager.bulletVector.indexOf(i), 1);

        }
    }
}

我是AS3 / OOP的新手,所以不要太苛刻我:P

1 个答案:

答案 0 :(得分:2)

你做了两件不正确的事:

1)尝试在vector对象上调用removeChild()方法。 removeChild()子方法只能在DisplayObjectContainer及其后代类上访问。

2)你将它自己的一个元素分配给由splice()返回的bulletVector,所以在这个表达式后,bulletVector不再是vector而是它是bullet对象。如果bManager的类未定义为动态,则应该为您提供“TypeError”。

我猜你的代码应该是这样的:

private function manageBullets(event:Event):void {

    for each(var i in bManager.bulletVector){

        if (i.y < -20) {

            if(i.parent != null) //Check if i is in display list
            {
                  i.parent.removeChild(i); //Remove i from display list
            }

            /* And then just remove i from vector no need to handle returned value.*/

            bManager.bulletVector.splice(bManager.bulletVector.indexOf(i), 1); 

        }
    }
}