Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка при подключении прелоадера (http://www.flasher.ru/forum/showthread.php?t=189931)

skolm 18.12.2012 15:38

Ошибка при подключении прелоадера
 
Здравствуйте ув.форумчане.

Написал простой прелоадер,пытаюсь вызвать его в конструкторе основного класса,выходит ошибка

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at src.preload::Preload()
at Test()

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

Вот основной класс
Код AS3:

package
{
        import flash.display.MovieClip;
 
        import src.TestObj;
        import src.preload.Preload;
 
        public class Test extends MovieClip
        {
                private var tO:TestObj = new TestObj();
                private var loading:Preload = new Preload();
                public function Test():void
                {
                        addChild(loading);
                        tO.sv1 = tO.sv1+3;
                        trace(tO.sv1);
                        trace(tO.sv2);
                        addChild(tO);
                }
        }
}

вот прелоадер

Код AS3:

package src.preload
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.ProgressEvent;
    import flash.display.*;
 
        public class Preload extends MovieClip
        {
                public var wait:Wait = new Wait(); // надпись
                public var waitLoading:WaitLoading = new WaitLoading(); // полоска загрузки
                public function Preload():void
                {
                        addChild(wait);
                        addChild(waitLoading);
                        loaderInfo.addEventListener(Event.COMPLETE,onComplite);
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);
                }
                public function onComplite(e:Event):void
                {
                        if(loaderInfo.bytesLoaded == loaderInfo.bytesLoaded)
                        {
                                removeChild(wait);
                                removeChild(waitLoading);
                        }
                }
                public function onProgress(e:ProgressEvent):void
                {
                        waitLoading.scaleX = loaderInfo.bytesLoaded/loaderInfo.bytesTotal;
                }
        }
}

Подскажите пожалуйста.

Stone 18.12.2012 15:47

loaderInfo не определено до добавления в дисплэй лист

skolm 18.12.2012 15:53

Добавлено через 51 секунду
Цитата:

Сообщение от Stone (Сообщение 1110575)
loaderInfo не определено до добавления в дисплэй лист

импорт не помог,та же самая ошибка.

Stone 18.12.2012 16:11

loaderInfo это переменная. ее инициализация происходит при добавлении объекта в дисплэй лист.

Код AS1/AS2:

public function Preload():void
{
        addChild(wait);
        addChild(waitLoading);
        // ждем добавления в дисплэй лист и инициализации нужным нам переменных
        addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
        removeEventListener(Event.ADDED_TO_STAGE, init);
        // дождались. теперь к переменным можно обращаться       
        loaderInfo.addEventListener(Event.COMPLETE,onComplite);
        loaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgress);       
}


skolm 22.12.2012 01:10

А для чего это необходимо делать?
Получается это событие необходимо для всех классов?


Часовой пояс GMT +4, время: 13:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.