同时删除事件侦听器以及精灵AS3

时间:2011-04-04 19:33:29

标签: actionscript-3 actionscript event-handling removechild

我无法同时删除事件侦听器和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();
        }
    }

2 个答案:

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