Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Ошибка 1009 при подгрузке SWF (http://www.flasher.ru/forum/showthread.php?t=202795)

alexqw 11.08.2013 19:17

Ошибка 1009 при подгрузке SWF
 
Подскажите в чём может быть проблема?
Есть такой прелоадер:

Код AS3:

package
{
        import flash.display.DisplayObject;
        import flash.display.Loader;
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.ProgressEvent;
        import flash.net.LocalConnection;
        import flash.net.URLRequest;
        import flash.system.ApplicationDomain;
        import flash.system.LoaderContext;
        import flash.system.Security;
        import flash.system.SecurityDomain;
 
        public class Preload extends MovieClip
        {
                public function Preload()
                {
 
                        this.addEventListener(Event.ADDED_TO_STAGE, onStage);
 
                        function onStage(e:Event) {
                        var preloader:Loader = new Loader();
                        var request:URLRequest = new URLRequest('game.swf');
                        preloader.contentLoaderInfo.addEventListener(Event.COMPLETE, onccCompl);
                        preloader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgr);
                        preloader.load(request);       
                        }
                }
 
                private function onProgr(e:ProgressEvent) {
                        var bLoad:int = e.bytesLoaded;
                        var bTotal:int = e.bytesTotal;
                        textWin.text = String(bLoad/bTotal*100);
                }
                private function onccCompl(e:Event) {
                        trace('ok');
                        var mc:MovieClip=e.target.content as MovieClip;
                        addChild(mc);
                }
        }
}


Проценты бегут, но при завершении флешка не добавляется на сцену.
Пробовал и SecurityDomain и по ADDED_TO_STAGE. Вылетает ошибка:
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Game()

mikhailk 11.08.2013 19:40

Цитата:

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at Game()
Ошибка возникает в классе Game.
Туда и надо смотреть.

alexqw 11.08.2013 19:51

Без прелоадера работает.
Может что-то с FlashVars?

belv 11.08.2013 20:08

А Вы там к stage не обращаетесь?

mikhailk 11.08.2013 21:15

Цитата:

Без прелоадера работает.
Может что-то с FlashVars?
А при компиляции разве не указывается, в какой строке ошибка?
Покажите код Game.

alexqw 11.08.2013 21:19

Цитата:

Сообщение от belv (Сообщение 1143446)
А Вы там к stage не обращаетесь?

Обращаюсь.

belv 11.08.2013 22:18

Ну вот Вам и ошибка, потому что, когда Вы загружаете 1 swf во 2, в загружаемом нет свойства stage.Можно будет обратится к stage, когда она будет уже добавлена в список отображения.Я думаю, что именно по этой причине во flash develop по умолчанию создается такая структура.
Код AS3:

        public function Main():void 
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // тут начинается выполнение программы, а не а конструкторе.
                }

Может я и ошибаюсь, на мой взгляд самое логичное объяснение.

mikhailk 12.08.2013 01:11

На самом деле, путаница в обработке событий.
Автор кода думает, что e.target в функции onccCompl это loader, но на самом деле это loader.contentLoaderInfo (см. на подписку на событие Event.COMPLETE).

Самое простое - вынести лоадер в приватные переменные класса и брать контент из него.

belv 12.08.2013 01:35

Вы попробуйте загрузить так как автор и Вы увидите, что все работает.
А ошибку генерирует загружаемая флешка.Компилятор говорит, что нет какого-то свойства.Это свойство stage, я больше чем уверен.
Попробуйте в загружаемую swf прописать, trace(stage.stageWidth); и Вы увидите эту же ошибку.

alexqw 12.08.2013 11:14

Цитата:

Сообщение от belv (Сообщение 1143460)
Ну вот Вам и ошибка, потому что, когда Вы загружаете 1 swf во 2, в загружаемом нет свойства stage.Можно будет обратится к stage, когда она будет уже добавлена в список отображения.Я думаю, что именно по этой причине во flash develop по умолчанию создается такая структура.
Код AS3:

        public function Main():void 
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // тут начинается выполнение программы, а не а конструкторе.
                }

Может я и ошибаюсь, на мой взгляд самое логичное объяснение.



Спасибо большое!!!
Так работает.


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

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