Удаление слушателя события, а также спрайта одновременно AS3 - PullRequest
0 голосов
/ 04 апреля 2011

У меня проблемы с удалением как слушателя событий, так и спрайта одновременно.В настоящее время я получаю сообщение об ошибке:

Ошибка типа: ошибка # 1009: невозможно получить доступ к свойству или методу ссылки на пустой объект.нет ошибки, но, очевидно, спрайт остается на экране.Любые идеи, как я могу избавиться от этой ошибки?

     //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 голосов
/ 05 апреля 2011

Попробуйте поменять местами эти строки
Может быть, ссылка на 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);
0 голосов
/ 05 апреля 2011

Помимо отсутствующего var перед маркером: Bullet, я не вижу ничего плохого в примере кода. Вы должны установить точку останова сразу после:

var shot:Bullet = e.currentTarget as Bullet;

И выясните, почему shot равно нулю. Я подозреваю, что в коде есть что-то не так, за исключением того, что вы предоставляете в качестве примера. Если код работает только с закомментированной строкой removeChild, он говорит мне, что e.currentTarget не равен null, но также не является ссылкой на экземпляр типа Bullet (то есть приведение типа as возвращает null) 1008 *

...