![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
День добрый
Я всегда делал прелодер отдельным файлом swf. Сейчас мне понадобилось до начала добавления главной флешки подгрузить все внешние файлы из папки проекта и поместить их в Dictionary, а потом уже загрузить саму главную флешку. Так вот нашел в FD возможность создания проекта с прелодером- мне как раз подходит, чтобы все классы( Dictionary например) передались для главной флешки. Сам код прелодера копировать наверное нет смысла, т.к. он стандартный, единственно что я изменил, так это перенес слушатель на прогресс в условие ,когда все мои картинки подгрузились if (counter == loaderArray.length) { loaderArray.length = 0; done = true; loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); } Особенно мне не понятен поставленный слушатель в конструкторе прелодера на EnterFrame и сама функция private function checkFrame(e:Event):void { if (currentFrame == totalFrames) { stop(); loadingFinished(); } } Как же оформить это злосчастный прелодер? |
|
|||||
|
так надо запускать главвный класс. а не класс прелоадера. У вас все прописано в главном?
[Frame(factoryClass = "Preloader")]. Кстати у меня проблемы в последних плеерах с этим у некоторых игроков. Висит флешка - грузится, потом мелькает прелоадер и сразу главная.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
GBee да, все прописано также, как если создать проект с прелодером изначально.
На форумах девелопера вычитал также что надо указать прелодер как главный класс проекта, а в Project Options --> Compiler Options ==> additional options прописать -frame main Main В общем что я там только не читал... не выходит ничего да и вообще муть какая то, я когда делала прелодер сам, ставил еще слушатель на COMPLETE, и после него уже удалял все что нужно. Ну ладно, можно также и на прогресс, но только когда bytes.loaded == bytes.total. А тут все действие происходит сразу же, так как висит EnterFrame... где смысл??? |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Не уверен, что поможет, но можно попробовать так:
- правый клик по классу прелоадера: set document class - удаляем из класса Main метатег: [Frame(factoryClass = "Preloader")] - в параметрах компилятора пишем -frame two Main А вообще, что мешает загрузить и распарсить данные в Main, и уже после этого спрятать прелоадер? |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Цитата:
Цитата:
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
Цитата:
А как мне тогда грамотно организовать подгрузку элементов до начала главной флешки? Как я уже писал я решил пойти путем загрузки всех картинок в Dictionary и потом уже брать оттуда когда мне надо в проекте. В Данном случае у меня получается что картинки понадобятся только через несколько действий пользователя, поэтому они успевают подгрузиться, но что делать если мне они нужны будут сразу же при запуске главной флешки? Стоит как то переписать внутренний прелодер(например самостоятельно сменить кадр после загрузки всех картинок) или есть какой то другой способ? illuzor не помогло. Цитата:
|
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
pomuс, покажите весь ваш код прелоадера
|
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
package { import com.FilesDictionary; import com.InitArray; import com.MyBitmap; import com.XMLLoader; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.DisplayObject; import flash.display.Loader; import flash.display.MovieClip; import flash.display.Shape; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFormat; import flash.utils.getDefinitionByName; /** * ... * @author Ma3 */ public class Preloader extends MovieClip { private var initArr:InitArray = new InitArray(); private var loaderArray:Array = new Array(); private var intervalArray:Array = new Array(); private var xmlList:XMLList; private var counter:int = 0; private var text:TextField = new TextField(); private var bar:Shape = new Shape(); private var done:Boolean = false; public function Preloader() { if (stage) { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; } addEventListener(Event.ENTER_FRAME, checkFrame); loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); var xml:XMLLoader = new XMLLoader("xml/allBlocks.xml"); xml.addEventListener(XMLLoader.LOADED, fillDictionary); xml.addEventListener(IOErrorEvent.IO_ERROR, ioError); addChild(text); text.selectable = false; var myFormat:TextFormat = new TextFormat(); myFormat.size = 50; myFormat.color = 0x222222; myFormat.font = "PT Sans" text.defaultTextFormat = myFormat; bar.graphics.beginFill(0xD0AA66); bar.graphics.drawRect(0, 0, 200, 3); bar.graphics.endFill(); addChild(bar); bar.x = stage.stageWidth / 2 - bar.width / 2 ; bar.y = stage.stageHeight / 2 +15; bar.scaleX = 0; } private function fillDictionary(e:Event):void { xmlList = e.target.xmlData.children(); for (var i:int = 0; i < xmlList.length(); i++) { var loader:Loader = new Loader(); loader.load(new URLRequest(xmlList.@url[i])); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete); //loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderArray.push(loader.contentLoaderInfo); intervalArray.push(xmlList.@out[i]); } } private function loadComplete(e:Event):void { counter++; var i:int = loaderArray.indexOf(e.currentTarget); e.currentTarget.removeEventListener(Event.COMPLETE, loadComplete); var name:String = xmlList.@url[i]; var bd:BitmapData = new BitmapData(e.currentTarget.content.width, e.currentTarget.content.height, true, 0x00FFFFFF); bd.draw(e.currentTarget.content); //var bitmap:Bitmap = Bitmap(e.currentTarget.content); //var bitmap:Bitmap = new Bitmap(bd); var bitmap:MyBitmap = new MyBitmap(bd); bitmap.inter = intervalArray[i]; bitmap.smoothing = true; //addChild(bitmap); initArr.blockAll.sort(); FilesDictionary.instance.addFile(name.slice(7, -4), bitmap); if (counter == loaderArray.length) { loaderArray.length = 0; done = true; } } private function ioError(e:IOErrorEvent):void { trace(e.text); } private function progress(e:ProgressEvent):void { var percent:Number = Math.round(e.bytesLoaded / e.bytesTotal * 100); var str:String = percent.toString(); text.text = str; text.x = stage.stageWidth / 2 - text.width / 2 ; text.y = stage.stageHeight / 2 - text.height / 2 ; bar.scaleX = percent / 100; /*if (e.bytesLoaded == e.bytesTotal && done) { }*/ } 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(text); removeChild(bar); startup(); } private function startup():void { var mainClass:Class = getDefinitionByName("Main") as Class; addChild(new mainClass() as DisplayObject); gotoAndStop(2); } } } на самом деле мне не принципиально делать что то именно с этим прелодером. Меня интересовал изначально вопрос подгрузки данных(картинок, видео) ссылки на которые берутся из xml. Сначала загрузить данные, потом загрузить главную флешку и потом уже запустить. Последний раз редактировалось pomuс; 27.04.2013 в 20:24. |
|
|||||
|
Регистрация: Dec 2010
Адрес: Ярославль
Сообщений: 1,255
|
Функцию startup() нужно запускать после того, как загружен воторой кадр (!)и обработан xml.
Лично я бы занялся обработкой xml уже в классе Main. |
|
|||||
|
Регистрация: Sep 2012
Сообщений: 204
|
illuzor каким же образом? До инициализации addedtoStage? мне же данные зачастую будут нужны уже в main.as и всех задействованных
|
![]() |
![]() |
Часовой пояс GMT +4, время: 02:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|