![]() |
|
||||||||||
|
|||||
|
Регистрация: Nov 2009
Сообщений: 23
|
Привет всем сожителям форума.
[Предыстория] Есть простой и удобный способ вставить прелоадер в свое приложение - http://www.bit-101.com/blog/?p=946. Для тех, кому лень читать, поясняю, что суть этого метода в использовании недокументированного мета-тега [Frame(factoryClass="Preloader")], который разбивает твое приложение на 2 кадра, и помещает прелоадер (Preloader) в первый кадр, а основное приложение во второй. Метод отличный, но декомпилятор показывает, что дополнительно он подключяает 36КБ различных флексовых классов. [/Предыстроия] Есть ли возможность воссоздать такую же схему на чистом АС3. Мои поиски в сторону mxmlc -frames.frame Preloader привели только к созданию 2-кадровой флешки, котороая не вызвает класс Preloader P.S. Немного поискав я обнаружил вот такой вот прелоадер написанный на Нахе http://www.mindless-labs.com/blog/ar...xe_preloader_u. Он весит 19 КБ и по прежднему включает в себя mx.core.* классы. Последний раз редактировалось boleg; 05.11.2010 в 20:09. |
|
|||||
|
Lorem ipsum
|
Я с трудом представляю себе приложение, для которого одновременно справедливы две позиции:
1. 36Kb лишнего веса — кошмар! 2. необходим прелоадер.
__________________
Поймай яблоко 2! |
|
|||||
|
boleg, вот пример как можно сделать с помощью -frame
Preloader.as (стандартный, который генерит ФД) package { import flash.display.*; import flash.events.*; import flash.text.TextField; import flash.utils.getDefinitionByName; [SWF(width=800,height=600,frameRate=30,backgroundColor=0xC254DE)] public class Preloader extends MovieClip { private var _txt:TextField = new TextField(); public function Preloader() { if (stage) { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; addChild(_txt); } 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 { // TODO update loader _txt.text = loaderInfo.bytesLoaded.toString(); } private function checkFrame(e:Event):void { if (loaderInfo.bytesLoaded == loaderInfo.bytesTotal && currentFrame == totalFrames) { stop(); loadingFinished(); } } private function loadingFinished():void { removeEventListener(Event.ENTER_FRAME, checkFrame); loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.removeEventListener(IOErrorEvent.IO_ERROR, ioError); // TODO hide loader startup(); } private function startup():void { var mainClass:Class = getDefinitionByName("HelloWorldClass") as Class; stage.addChild(new mainClass() as DisplayObject); } } } package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; public class HelloWorldClass extends Sprite { //для теста пихаем картинку, чтобы раздуть второй кадр (куда этот класс добавляется) [Embed(source = 'someshit.jpg')] private var ShitImage:Class; public function HelloWorldClass():void { init(); } private function init(e:Event = null):void { addChild(new ShitImage() as DisplayObject); var s:Sprite = new Sprite(); s.graphics.beginFill(0x098505); s.graphics.drawCircle(100, 100, 100); s.graphics.endFill(); addChild(s); } } } mxmlc Preloader.as -frame 1 HelloWorldClass или с доп.опциями mxmlc Preloader.as -frame 1 HelloWorldClass -debug -benchmark -keep -dump-config config.xml первый кадр около 2х килобайт. ) |
|
|||||
|
Регистрация: Nov 2009
Сообщений: 23
|
ps_spectre, спасибо работает. Респект как тру-флешеру.
Для тех кто попытается повторить то, о чем говорил ps_spectrе: 1. Необходимо сделать основным классом приложения сам прелоадер. (Preloader.as, клик правой кнопкой мыши, "Always Compile") 2. Аналогичную галочку убрать у класса HelloWorld.as 3. Добавить дополнительные аргументы компиляции. Цитата:
Последний раз редактировалось boleg; 06.11.2010 в 00:37. |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:05. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|