AS3 - Как вы игнорируете класс (Ошибка № 1009)?

Я создал класс для MovieClip, создавая монеты для игрока (char), чтобы забрать. Предполагается, что все, что нужно сделать классу - это добавить к счету и монетам собранные переменные, а затем убрать одну монету со сцены. Но когда я меняю кадр, используя gotoAndStop(#);консольная спам

ErrorType: Ошибка #1009: невозможно получить доступ к свойству или методу пустой ссылки на объект."

Класс монет:

public class coin extends MovieClip{
    var char:MovieClip;
    var MainTimeLine = MovieClip(root);
    public function coin() {
        // constructor code
            this.addEventListener(Event.ENTER_FRAME,update);

    }

    function update(event:Event):void{
        if(MainTimeLine.currentFrame!=5){
            char=MovieClip(root).char;
            if(this.hitTestObject(char)){
                this.removeEventListener(Event.ENTER_FRAME,update);
                parent.removeChild(this);
                MainTimeLine.score++;
                MainTimeLine.coinscollected++;
            }
        }
    }

}

1 ответ

Решение

Корень не заполняется, пока ваш экранный объект не будет добавлен в список отображения. Вы должны прослушать это событие перед установкой переменной.

var char:MovieClip;
var MainTimeLine; //do not initialize here, root is null at this point

public function coin() {
    // constructor code

    //root is still null here sometimes too, so see if it's populated yet
    if(root){
        init(); //root is populated, skip to initialization
    }else{
        this.addEventListener(Event.ADDED_TO_STAGE,addedToStage);  //root isn't populated yet, listen for added to stage and then initialize
    }
}

private function addedToStage(e:Event = null):void {
    this.removeEventListener(Event.ADDED_TO_STAGE,addedToStage);
    init();
}

private function init():void {
    MainTimeLine = MovieClip(root)
    this.addEventListener(Event.ENTER_FRAME,update);
}

Другие вопросы по тегам