|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2012
Сообщений: 14
|
Проблема с созданием внутреннего прелоадера во Flash Builder 4.7
Добрый день. С этой проблемой уже намучался пару дней, но нормального решения проблемы так и не нашел. До того как спрашивать, прочитал множество постов связанных с этой темой и на этом форуме тоже, но не помогло. В чем суть, т.к. флексовый мета-тег [Frame(factoryClass)] во Flash Builder 4.7 уже не поддерживается, выходит ошибка 1065 Variable Main is not defined, я использовал в данном случае ключ компилятора -frame two Main - где Main имя документ-класса. Так вот в кач-ве примера работы прелоадера взял игру написанную с использованием движка flixel. В кач-ве документ-класса сделал класс игры Mode.as. Протестировал работу прелоадера вначале в Adobe Flash CS4 в опции View - Simulate Download, так вот полосы загрузки я не увидел, вначале появился белый экран, а затем саму игра. Далее попробовал сделать класс Preloader.as документ-классом, и это тоже не решило проблему. Затем использовал в denwer вместе с Charles HTTP Debug Proxy в нем есть опция throttling c заданием пропускной способности. В этом случае тоже не увидел полосу загрузки. По этому поводу я записал видео, в котором показывается, как я тестировал работу прелоадера в Flash IDE. Вообщем народ не могли вы подробным образом описать в чем может быть проблема и как её решить.
|
|
|||||
Мета тэги не зависят от среды исполнения, они вшиты во флекс СДК, в компилятор.
Простой прелоадер можно сделать так (на примере измененного темплейта FlashDevelop) Мейн класс (точка входа в программу, обычно обозначается отличным от других классов значком): package { [Frame(factoryClass = "Preloader")] public class Main extends Sprite { 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); // entry point } } } package { public class Preloader extends Sprite { public function Preloader() { loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); // TODO show loader } private function ioError(e:IOErrorEvent):void { } private function progress(e:ProgressEvent):void { var percentage:Number = e.bytesLoaded / e.bytesTotal; if(percentage == 1) { loadingFinished(); } } private function loadingFinished():void { loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError); // TODO hide loader startup(); } private function startup():void { var mainClass:Class = getDefinitionByName("Main") as Class; addChild(new mainClass() as DisplayObject); } } } Последний раз редактировалось KumoKairo; 30.08.2013 в 15:21. |
|
|||||
Регистрация: Oct 2012
Сообщений: 14
|
Цитата:
KumoKairo, не помогло. До того как спрашивать я пробовал этот стандартный FD прелоадер. Кто-нибудь вообще здесь может дать нормальный работающий пример с прелоадером вместе с прогресс-баром на чистом AS3.0 без Flash IDE. Исходник прикреплен к сообщению вариант описанный KumoKairo с дополненным кодом прогресс бара. Последний раз редактировалось gadzhimari; 30.08.2013 в 15:51. |
|
|||||
Специально скачал флешбилдер посмотреть что там и как - оказалось все просто, логика правда немного другая
Вместо добавления кадра - прелоадера на Sprite - мейн класс, мы делаем сам мейн класс прелоадером - MovieClip, в который вставляем кадр с реальной точкой входа нашего приложения. После загрузки всего остального содержимого просто переходим на другой кадр, получив дефинишн по имени класса, предварительно добавив его в качестве аргумента компилятора: Цитата:
Обращу внимание на то, что пустой проект грузится моментально, поэтому прогресс бара видно не будет. Чтобы увидеть прогресс бар, можно добавить большой файл на второй кадр и залить на хостинг. Работоспособность подтверждает трейс процесса загрузки. Все работает Главное правило с прелоадерами - ни в коем случае не импортировать ненужные классы, иначе первый кадр потянет за собой все ресурсы приложения, что полностью убьет смысл прелоадера |
|
|||||
Регистрация: Oct 2012
Сообщений: 14
|
KumoKairo, большое спасибо за помощь. Действительно прелоадер работает. Моей ошибкой было то, что я делал документ-классом не класс прелоадера. Только вот не мог ты посмотреть на этот прелоадер и сказать в чем может быть проблема. Т.е.
Я делаю класс Preloader документ-классом. В настройках проекта пишу -frame two Mode, но вот линии загрузки не вижу. package { import org.flixel.system.FlxPreloader; [SWF(width="640", height="480", backgroundColor="#000000")] public class Preloader extends FlxPreloader { public function Preloader():void { className = "Mode"; super(); } } } |
|
|||||
Слишком быстро грузится проект, условие
выполнится при первом проходе по обработчику onEnterFrame Вот закинул ту же демку на удаленный сервак (добавил в СВФ аудио файл размером 10 мб), прелоадер работает как положено После первой загрузки флешка кешируется и сценка с прелоадером быстро проскакивает Последний раз редактировалось KumoKairo; 30.08.2013 в 19:23. |
|
|||||
Регистрация: Oct 2012
Сообщений: 14
|
Цитата:
|
|
|||||
Не тестируйте через флеш иде)
Сделайте фиктивную функцию загрузки для отладки. Которая, скажем, раз в 100 мс будет выкидывать "событие" загрузки очередных 15% приложения. На деле приложение, конечно, давно будет загружено, но обработчку onProgress (или onEnterFrame как в случае с Фликселем) совершенно все равно откуда брать данные для отображения. |
Часовой пояс GMT +4, время: 18:32. |
|
« Предыдущая тема | Следующая тема » |
|
|