Внешний Preloader вызывает TypeError - PullRequest
0 голосов
/ 18 мая 2011

Я создаю FLA-файл, который имеет класс документа "Main", и в его конструкторе я сказал ему отследить (stage). Я добавил внешний предварительный загрузчик для загрузки этого SWF-файла, но, как вы знаете, оператор трассировки показывает NULL.

Вот предварительный загрузчик, который работает в данный момент.

import flash.display.Loader;
import flash.events.ProgressEvent;
import flash.events.Event;
import flash.net.URLRequest;

var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
l.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
l.load(new URLRequest("Main.swf"));

function onProgress(e:ProgressEvent):void {
    preloader.mask.height = (e.bytesLoaded / e.bytesTotal) * preloader.lemon.height;
}

function onComplete(e:Event):void {
    removeChildAt(0);
}

Для самого Main.swf вот класс документа:

package  {

    import Position;
    import flash.display.*;
    import flash.events.Event;

    public class Main extends MovieClip {

        public function Main():void {
            trace(stage);
        }
    }
}

//// /// РЕШИТЬ Я забыл добавить предмет на сцену, но, к счастью, в коде Филиппа я это увидел. Так что просто запомните, как только сработает Event.COMPLETE, добавьте содержимое загрузчика на сцену, иначе класс документа для SWF-файла покажет null.

1 Ответ

3 голосов
/ 18 мая 2011

вам нужно подождать, пока ваш основной класс будет добавлен на сцену (Event.ADDED_TO_STAGE).Прелоадер теперь является владельцем сцены ...

Если вы загружаете внешний SWF-файл через загрузчик, вам сначала нужно дождаться Event.INIT, который запускается загрузчиком после завершения загрузки и конструктора.вашего загруженного SWF выполняется.Если вы добавите содержимое загрузчиков в список отображения, также будет инициировано событие ADDED_TO_STAGE.Перед добавлением экранного объекта в рабочую область свойство stage имеет значение null.

ldr //your loader

ldr.loaderInfo.addEventListener (Event.INIT, foo);ldr.load ();

function foo (e: Event): void {var content: * e.target.content;addChild (content);}

...