Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прелоудер и Flashdevelop (http://www.flasher.ru/forum/showthread.php?t=169069)

pas.delger 27.09.2011 12:29

Прелоудер и Flashdevelop
 
Добрый день!

Только что перешел на новый стиль разработки. Flash IDE использую только для генерации SWC-библиотеки, весь код пишу в FlashDevelop. Итак, создал в ФД проект с прелоудером, вот что у меня в классе Main:
Код AS3:

                private var preloader:MovieClip;
                private var loader:Loader = new Loader;
 
                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);
                        instance = this;
                        loader.load(new URLRequest(Settings.host+"Preloader1.swf"));
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPreloaderLoaded);
                }
 
                private function onPreloaderLoaded(e:Event):void{
                        preloader = e.currentTarget.content;
                        addChild(preloader);
                        addEventListener(Event.ENTER_FRAME, onFrame);
                }
 
                private function onFrame(e:Event):void{
                        preloader.count = stage.loaderInfo.bytesLoaded/stage.loaderInfo.bytesTotal*100;
                        if (stage.loaderInfo.bytesLoaded==stage.loaderInfo.bytesTotal&&preloader.preloader.logo.currentFrame==preloader.preloader.logo.totalFrames){
                                removeEventListener(Event.ENTER_FRAME, onFrame);
                                removeChild(preloader);
 
                                GameInitializer.init();
                        }
                }

Здесь я подгружаю с сервака мувиклип-прелоудер который визуализирует процесс загрузки. Просто вот этой вот строчкой
Код AS3:

preloader.count = stage.loaderInfo.bytesLoaded/stage.loaderInfo.bytesTotal*100;

помещаю в него текущий прогресс, а он уже его сам отрисовывает. Данный способ прекрасно работал когда я создавал Flash IDE Project и грузил прелоудер в первый кадр а весь контент был во втором. Сейчас же индикатор загрузки не появляется. Все время висит белый экран а потом прорисовывается весь флеш одним куском. Результат здесь:

http://artgoldau.com/work/casino/crazystarterflash/

Я попробовал вставить скомпиленную флешку в свой обычный html-файл, но тогда флешка вообще не открывается, висит все время белым экраном. Такое ощущение что ФД как-то посмоему компилит и особо встраивает флешку в html. Как тогда в вообще потом верстать страницы с моей флешкой?

Помогите, пожалуйста, разобраться.

TanaTiX 27.09.2011 12:47

А это не наблюдали?
Цитата:

ReferenceError: Error #1056: Не удается создать свойство preloader в Preloader.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at Preloader()[D:\works\Megatel\ENGINES\Slots\Crazy Starter\FLASH\src\Preloader.as:18

pas.delger 27.09.2011 12:58

нет, не наблюдал. я кое с чем разобрался, со всем вылетело из головы, что я создавал не проект с прелоудером а обычный AS3 проект. исправил, теперь у меня класс main и preloader.as. Main совершенно обычный, ни чем не выдающийся:

Код AS3:

 
[Frame(factoryClass="Preloader")]
        public class Main extends MovieClip {
                public static var instance:Main;
 
                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);
                        instance = this;
                        GameInitializer.init();
                }
 
        }

а вся прорисовка теперь в классе Preloader:

Код AS3:

 
                public function Preloader() {
                        if (stage) {
                                stage.scaleMode = StageScaleMode.NO_SCALE;
                                stage.align = StageAlign.TOP_LEFT;
                        }
 
                        loader.load(new URLRequest(Settings.host+"Preloader1.swf"));
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPreloaderLoaded);
                }
 
                private function onPreloaderLoaded(e:Event):void {
                        preloader = e.currentTarget.content;
                        addChild(preloader);
                        addEventListener(Event.ENTER_FRAME, checkFrame);
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress);
                        loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError);
                }
 
                private function ioError(e:IOErrorEvent):void {
                        trace(e.text);
                }
 
                private function progress(e:ProgressEvent):void {
                        preloader.count = stage.loaderInfo.bytesLoaded/stage.loaderInfo.bytesTotal*100;
                }
 
                private function checkFrame(e:Event):void {
                        if (currentFrame == totalFrames) {
                                stop();
                                loadingFinished();
                        }
                }
 
                private function loadingFinished():void {
                        removeEventListener(Event.ENTER_FRAME, checkFrame);
                        loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
                        loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError);
 
                        removeChild(preloader);
 
                        startup();
                }
 
                private function startup():void {
                        var mainClass:Class = getDefinitionByName("Main") as Class;
                        addChild(new mainClass() as DisplayObject);
                }

Но сейчас, почему-то, когда запускаю с компа все ок, а если загрузить с сервака - черный экран и вообще в итоге игра не открывается. Раньше был белый, и хотя-бы одним куском все проирсовывалось - сейчас не прорисовывается вообще.

TanaTiX 27.09.2011 13:15

Создайте текстовое поле, куда выводите служебную информацию для отладки.

pas.delger 27.09.2011 13:33

ммм.. круто.. информация показала что начинается только загрузка мувиклпа прелоудера, а дальше ничего не идет. метод onPreloaderLoaded не вызывается почему-то.. с локалки все нормально работает, с сервака не грузится..

TanaTiX 27.09.2011 13:44

Слишком мало информации. Может у вас там IO_ERROR выскакивает, может еще что. Проверяйте. И поставьте дебажный плеер.

GBee 27.09.2011 13:46

или SecurityError ;о)

pas.delger 27.09.2011 13:50

как это проверить?

TanaTiX 27.09.2011 13:52

Подписаться на соответствующие события и посмотреть, сработают ли. И поставьте дебажный плеер, многие ошибки сами появятся (в т.ч. и эта)

pas.delger 27.09.2011 14:03

поставил дебаг-плеер и выскочила-таки эта ошибка:

ReferenceError: Error #1056: Не удается создать свойство preloader в Preloader.
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at Preloader()[D:\works\Megatel\ENGINES\Slots\Crazy Starter\FLASH\src\Preloader.as:20]

что же это может значит? причем локально все впорядке.


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

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