我无法同时删除事件侦听器和sprite。我目前收到错误:
TypeError:错误#1009:无法访问 null对象的属性或方法 参考
如果我注释掉removeChild,我没有错误,但很明显,精灵仍然在屏幕上。我有什么想法可以摆脱这个错误吗?
//Bullet extends Sprite Class
bullet:Bullet = new Bullet();
mc.addChild(bullet);
bullet.addEventListener(Event.ENTER_FRAME, shoot);
function shoot(e:Event):void {
var shot:Bullet = e.currentTarget as Bullet;
//check shot is outside the frame
if (shot.x < 0 - shot.width || shot.x > stage.stageWidth || shot.y > 525)
{
//trying to remove the thing and it's listener
e.currentTarget.removeEventListener(e.type,arguments.callee);
e.currentTarget.parent.removeChild(shot);
}
else
{
shot.setInMotion();
}
}
答案 0 :(得分:0)
除了bullet:Bullet之前缺少 var 之外,我在示例代码中没有看到任何错误。您应该在以下之后设置断点:
var shot:Bullet = e.currentTarget as Bullet;
找出为什么 shot 为空。我怀疑在你提供的一点点代码之外的代码中有一些不妥之处。如果代码仅使用removeChild行注释掉,它告诉我e.currentTarget不是null,但它也不是对Bullet类型实例的引用(即“as”强制转换为null)。 / p>
答案 1 :(得分:0)
尝试倒转这些线路 也许对e.currentTarget的引用会因对象引用而丢失
e.currentTarget.removeEventListener(e.type,arguments.callee);
e.currentTarget.parent.removeChild(shot);
到
e.currentTarget.parent.removeChild(shot);
e.currentTarget.removeEventListener(e.type,arguments.callee);