AS3 - Ошибка № 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект - PullRequest
1 голос
/ 03 января 2012

Я создаю игру, в которой, если пуля противника попадает в пользователя, пуля исчезает.Все работает нормально, за исключением того, что я продолжаю получать,

'Ошибка # 1009: не удается получить доступ к свойству или методу пустой ссылки на объект'

Как только пуля попадает в пользователя(пуля исчезает, хотя).Это смущает меня, потому что я почти точно использовал тот же код в другом классе, где он отлично работает.

package classes.enemy 
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;
import classes.Main;

public class Bullet extends MovieClip
{
    var speed:Number;

    public function initialize()
    {
        var stageReff:Stage = this.stage as Stage;
        stage.addEventListener("enterFrame", enterFrame);
    }

    //code 

    function enterFrame(e:Event):void
    {
        this.x += speed;

        if(this.hitTestObject(Main.user))
        {
            removeEventListener("enterFrame", enterFrame);
            this.parent.removeChild(this);
            // line above gives the error.
        }
    }
}
}

Я понятия не имею, что может быть не так.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 03 января 2012

Полагаю, это связано с тем, что вы добавляете слушателя события ввода кадра на сцену, но пытаетесь удалить его из самого объекта прослушивания.

Попробуйте изменить

var stageReff:Stage = this.stage as Stage;
stage.addEventListener("enterFrame", enterFrame);

до

addEventListener("enterFrame", enterFrame);
0 голосов
/ 03 января 2012

Причина, по которой он не работает, заключается в том, что вы удаляете Bullet от его родителя. Поэтому, когда вы ссылаетесь на this.parent, он возвращает null, потому что просто больше нет родителя. Вы пытаетесь удалить событие ENTER_FRAME, но поскольку вы установили его на сцену, исходное событие ENTER_FRAME продолжает выполняться. Вы можете просто исправить это так:

if(this.x > 30)
{
    stage.removeEventListener("enterFrame", enterFrame);
    this.parent.removeChild(this);
}

Но, как уже указывал @RasmusWriedtLarsen, лучше обрабатывать эти события более глобально. А также позвольте родителю обработать удаление Bullet.

0 голосов
/ 03 января 2012

вы не удаляете слушателя событий со сцены, а сам объект:)

Я бы не рекомендовал делать это так, создать одного слушателя в вашем основном игровом классе и вызвать функцию обновления для всех объектов!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...