Этап null Экспорт ActionScript 3 Flash CS5 для ActionScript - PullRequest
0 голосов
/ 21 июля 2011

Вот сделка, У меня есть основной класс, который я вызываю из файла .fla. Все работало нормально, пока я не установил объект в библиотеке «экспорт для сценария действия» ... после этого этап больше не работал, этап теперь возвращает «ноль», просто потому, что я проверил объект на «экспорт для действия».

Я использую flash cs5, и с ранней версией flash этого никогда не случалось со мной.

Извините за английский ... и я надеюсь, что я достаточно ясно.

Пример кода:

package com {

import flash.display.MovieClip;

public class Teste extends MovieClip {

    public function Teste() {
        trace(stage)// traced null 
    }
}
}

Я попытаюсь объяснить шаги, которые я делаю. - создать этот класс тестов; - Откройте файл .fla и добавьте этот класс в поле Class в свойстве .fla файла; - создать и MovieClip и попытаться экспортировать его из Actionscript; И тут возникает проблема ... когда я сделал это, сцена теперь возвращает Null только потому, что я экспортировал MovieClip в библиотеку. o.o

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Причина в том, что Stage, вероятно, стал доступен сразу же, когда не было много места для загрузки.Теперь, когда вы добавили что-то для экспорта в ActionScript, загрузка может даже занять миллисекунду дольше и этап не будет доступен.

Всегда проверяйте, существует ли этап, и затем дождитесь его существования, прежде чем пытаться ссылаться на него.

Попробуйте это:

package com {

import flash.display.MovieClip;

public class Teste extends MovieClip {

    public function Teste() {
        if(!stage) addEventListener(Event.ADDED_TO_STAGE, _addedToStage)
        else _addedToStage();
    }

    private function _addedToStage(e:Event = null)
    {
        trace(stage)// traced null 
    }
}
}
0 голосов
/ 21 июля 2011

Если это ваш класс документа, то есть хороший шанс, что этот код инициализируется до того, как объект stage существует.Я только догадываюсь, но я ожидаю, что изменение в поведении вызвано тем, что ваши классы 'export for Actionscript' загружают свои определения в первый кадр и вызывают некоторую форму задержки.

Попробуйте подождать, пока сцена не будет:

package com {

import flash.display.MovieClip;

public class Teste extends MovieClip {

    public function Teste() {
        if(stage) {
            init();
        } else {
            addEventListener(Event.ADDED_TO_STAGE,init);
        }
    }

    private function init(evt:Event = null):void {
        removeEventListener(Event.ADDED_TO_STAGE,init);
        //stage should now exist
        trace(stage);
    }
}
}
...