Ошибка при попытке использовать stage.height для размещения графики - PullRequest
0 голосов
/ 17 ноября 2009

Эй, Пипц! У меня есть изображение нижнего колонтитула, которое я хочу выровнять по нижней части сцены, однако я получаю ошибки.

Как вы видите, у меня есть слушатель ADDED_TO_STAGE в функции конструктора.

package src.display{

import flash.text.*;
import flash.display.*;
import flash.geom.Matrix;
import flash.events.Event;

public class Frame extends Sprite {
    private var footer:Sprite = new Sprite();

    // ☼ ------ Constructor
    public function Frame():void {
        this.addEventListener(Event.ADDED_TO_STAGE, tracer);
    }

    public function tracer(event:Event) {
        trace("Frame added to stage --- √"+"\r");
        this.removeEventListener(Event.ADDED_TO_STAGE, tracer);
    }

    // ☼ ------ Init
    public function init():void {
        footer.graphics.beginFill(0x000);
        footer.graphics.drawRect(0,0,800,56);
        footer.graphics.endFill();
        footer.y = (stage.height - footer.height); // <-- This Line

        addChild(footer);
    }

}

}

Фильм будет работать правильно, если я закомментирую строку 26 (но, конечно, я не хочу, чтобы Y было 0):

footer.y = (stage.height - footer.height);

Вот ошибка в окне вывода, которое я получаю:

TypeError: Ошибка # 1009: Невозможно получить доступ к свойству или методу пустой ссылки на объект. в src.display :: Frame / init () [/ Users / lgaban / Проекты / Player / src / display / Frame.as: 26]


UPDATE

Ответил на мой собственный вопрос, исправил здесь

Ответы [ 2 ]

1 голос
/ 17 ноября 2009

Использование настраиваемого события немного излишне, особенно если у вас уже есть прослушиватель для добавления на сцену. Я бы сделал это так:

package src.display{

    import flash.text.*;
    import flash.display.*;
    import flash.geom.Matrix;
    import flash.events.Event;

    public class Frame extends Sprite {

        // don't instantiate your sprite here, it's weird! :)
        private var footer:Sprite;

        // this is the same as in your example
        public function Frame():void {
            this.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
        }

            // i renamed this to reflect what it does
        private function handleAddedToStage(event:Event) {
            trace("Frame added to stage --- √"+"\r");
            this.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage);
            init();
        }

        // this is also essentially the same, except for private since it shouldn't be called from the outside
        private function init():void {
            footer = new Sprite();
            footer.graphics.beginFill(0x000);
            footer.graphics.drawRect(0,0,800,56);
            footer.graphics.endFill();
            footer.y = (stage.height - footer.height);

            addChild(footer);
        }

    }
}
1 голос
/ 17 ноября 2009

Не то, чтобы это был полный ответ, но эта ошибка говорит вам, что этап равен нулю.

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