![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Есть файл игры, в нем хранится основная графика (вид боевой техники и т.п.), файл весит около 2 мегабайт. Вся дополнительная графика (такая как деревья, вода, трава и т.п.) подгружается отдельно, и для этого организованы предзагрузчики.
Но вопрос вот в чем, а как можно организовать загрузчик для самого swf файла? Иначе те, у кого медленный инет могут подумать, что вообще ничего не грузится Последний раз редактировалось goodguy; 28.11.2010 в 11:22. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Если приложение в разработке - можно сделать внутренний прелоадер.
Это тут было. Если приложение уже собрано - можно сделать внешний прелоадер. Рассматриваете основной файл приложения просто как мувик и грузите его. Когда он загрузился - кидаете его на сцену и все. |
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Что мне даст внутренний прелодер? Я то сам знаю, что все грузится. А для дополнительной графики внутренние прелодеры уже есть |
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Да как делается сам прелодер я знаю. Или может я не совсем понял здесь.
Т.е. нужно создать один небольшой файл, который будет быстро загружаться сам, а потом тянуть файл игры с сервера? ФлешДевелоп создает такой класс прелодера: package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.events.Event; import flash.events.ProgressEvent; import flash.utils.getDefinitionByName; public class Preloader extends MovieClip { public function Preloader() { addEventListener(Event.ENTER_FRAME, checkFrame); loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); // show loader } private function progress(e:ProgressEvent):void { trace(e.bytesLoaded / 1024); } private function checkFrame(e:Event):void { if (currentFrame == totalFrames) { removeEventListener(Event.ENTER_FRAME, checkFrame); startup(); } } private function startup():void { // hide loader stop(); loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); var mainClass:Class = getDefinitionByName("FunnyWar") as Class; addChild(new mainClass() as DisplayObject); } } } |
|
|||||
|
Banned
Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
|
Цитата:
Почитал эту статью, сделал загрузчик как там описано: package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.utils.getDefinitionByName; public class FDPreloader extends MovieClip { public function FDPreloader() { stop(); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; addEventListener(Event.ENTER_FRAME, enterFrame); } public function enterFrame(event:Event):void { trace(totalFrames); if(framesLoaded == totalFrames) { removeEventListener(Event.ENTER_FRAME, enterFrame); nextFrame(); init(); } else { var percent:Number = root.loaderInfo.bytesLoaded / root.loaderInfo.bytesTotal; } } private function init():void { var mainClass:Class = Class(getDefinitionByName("FunnyWar")); if(mainClass) { var app:Object = new mainClass(); addChild(app as DisplayObject); } } } } [Frame(factoryClass="FDPreloader")] public function FunnyWar():void { if (stage) initialize(); else this.addEventListener(Event.ADDED_TO_STAGE, initialize, false, 0, true); } В статье написано, что тег Frame вынуждает компилятор создать 2 кадра, в персом работает загрузчик, во втором, начинает грузиться отстальное. Как можно заметить, в коде я добавил строчку: Если верить этой статье, то кадров должно быть уже 2, но трейс выдает 1. В чем подвох? ![]() Цитата:
Цитата:
|
|
|||||
|
Аха. Frame factory и прелоадер готов за 2 минуты.
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Давно не компилил во Флэше, но вроде там надо галочку "грузить в первый кадр" снять со всех объектов в библиотеке (кроме тех что относятся к прелоадеру конечно).
__________________
Reality.getBounds(this); |
|
|||||
|
Угу, а потом во 2 кадр положить все эти объекты. Инициализировать всё в 3. Ужас. короче )
__________________
Тут мужик танцует и поёт про флэш |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:19. |
|
|
« Предыдущая тема | Следующая тема » |
|
|