Страница 1 из 1
проблема с прелоадером
Добавлено: 25 ноя 2012, 10:23
chibiryaev
Добавил в приложение прелоадер и сразу возникли артефакты: во время игры появляется какая-то жёлтая рамка по периметру, но это не особо мешает, её почти не видно. Если заходить в игру из браузеров опера или мозилла, то начинает люто-бешено тормозить, если обновить страницу, то фпс=60 и всё плавно, к хрому это не относится, там всегда 60. Если выпилить прелоадер, то ни рамки ни тормозов нет.
Посмотрел в списке отображения -- прелоадер висит самым 1-м, на нем уже мейн, возможно тормоза из-за этого. Есть ли способ как-то полностью выпилить присутствие прелоадера после того, как он отработал? Или какое-то другое решение проблемы
Re: проблема с прелоадером
Добавлено: 25 ноя 2012, 11:02
Casperovskii
Код в студию. Может, после загрузки стоит обнулять переменные, чтобы сборщик мусора их удалил из памяти?
Re: проблема с прелоадером
Добавлено: 25 ноя 2012, 11:10
chibiryaev
Casperovskii писал(а):Код в студию. Может, после загрузки стоит обнулять переменные, чтобы сборщик мусора их удалил из памяти?
Код стандартный, флешдевелоповский
Код: Выделить всё
package { import flash.display.DisplayObject; import flash.display.MovieClip; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.utils.getDefinitionByName; /** * ... * @author chibiryaev */ public class Preloader extends MovieClip { public function Preloader() { addEventListener(Event.ENTER_FRAME, checkFrame); loaderInfo.addEventListener(ProgressEvent.PROGRESS, progress); loaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); // TODO show loader } private function ioError(e:IOErrorEvent):void { trace(e.text); } private function progress(e:ProgressEvent):void { // TODO update loader } 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); // TODO hide loader startup(); } private function startup():void { //trace(stage.numChildren); var mainClass:Class = getDefinitionByName("Main") as Class; addChild(new mainClass() as DisplayObject); } } }
В мейне ничего не меняется, кроме добавления/убирания [Frame(factoryClass="Preloader")]
Re: проблема с прелоадером
Добавлено: 25 ноя 2012, 11:18
chibiryaev
Частично решил эту проблему -- изменил код прелоадера, сгенеренный флешдевелопом в этой функции
Код: Выделить всё
private function startup():void { var mainClass:Class = getDefinitionByName("Main") as Class; stage.addChild(new mainClass() as DisplayObject); stage.removeChild(this);}
Тормоза исчезли, но жёлтый прямоугольник по периметру остался, но это мелкая проблема
Re: проблема с прелоадером
Добавлено: 25 ноя 2012, 12:51
sanych_dv
chibiryaev писал(а):но жёлтый прямоугольник по периметру остался
Попробуйте в классе Main добавить
Код: Выделить всё
// после removeEventListener(Event.ADDED_TO_STAGE, init); stage.dispatchEvent(new Event(Event.DEACTIVATE));stage.dispatchEvent(new Event(Event.ACTIVATE));stage.stageFocusRect = false;
Re: проблема с прелоадером
Добавлено: 25 ноя 2012, 12:58
chibiryaev
Попробуйте в классе Main добавить
Спасибо, это помогло, прямоугольник пропал.
Re: проблема с прелоадером
Добавлено: 20 янв 2013, 10:25
mastaxys
Доброго дня, подскажите, использую такой код в прелоадере:
Код: Выделить всё
package { import flash.display.*; import flash.events.*; import flash.text.TextField; import flash.net.URLRequest; public class preloader extends Sprite { public var loader:Loader = new Loader(); public function preloader():void { var url='test.swf';// ссылка на загружаемый swf // создание и размещение поля с прогрессом загрузки var progress_tf:TextField = new TextField(); progress_tf.x=530/2; progress_tf.y=380/2; addChild(progress_tf); var loadURL:URLRequest=new URLRequest(url); //var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onLoadProgress);// прогресс загрузки loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);// загружено loader.load(loadURL); function onLoadProgress(evt:ProgressEvent):void { progress_tf.text = String(Math.round(100*(evt.bytesLoaded/evt.bytesTotal)))+"%"; } function onLoadComplete(evt:Event):void {//окончание загрузки // удаляем поле с прогрессом загрузки removeChild(progress_tf); // отображаем то что загрузилось addChild(loader); } } }}
В загружаемой флешке ругается на :
Код: Выделить всё
flashVars = stage.loaderInfo.parameters as Object;
Ну это понятно, параметры не получили..
Вопрос, как передать из такого прелоадера параметры flashVars?
Если кому не трудно, расскажите какие прелоадеры Вы используете для ВКонтакте?
Re: проблема с прелоадером
Добавлено: 30 янв 2013, 12:30
mastaxys
mastaxys писал(а):
Вопрос, как передать из такого прелоадера параметры flashVars?
Неужели никто не знает? ((