1

每个人。

我试图让我的项目符号实例在它们离开屏幕后被删除,但我得到了这个:

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

4

1 回答 1

2

您正在做两件不正确的事情:

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

2)您将它自己的一个元素分配给由 splice() 返回的 bulletVector,因此在此表达式之后 bulletVector 不再是向量,而是子弹对象。如果 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); 

        }
    }
}
于 2012-10-21T06:52:24.033 回答