проблема с прелоадером

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
chibiryaev
Сообщения: 8
Зарегистрирован: 02 дек 2011, 10:53

проблема с прелоадером

Сообщение chibiryaev »

Добавил в приложение прелоадер и сразу возникли артефакты: во время игры появляется какая-то жёлтая рамка по периметру, но это не особо мешает, её почти не видно. Если заходить в игру из браузеров опера или мозилла, то начинает люто-бешено тормозить, если обновить страницу, то фпс=60 и всё плавно, к хрому это не относится, там всегда 60. Если выпилить прелоадер, то ни рамки ни тормозов нет.
Посмотрел в списке отображения -- прелоадер висит самым 1-м, на нем уже мейн, возможно тормоза из-за этого. Есть ли способ как-то полностью выпилить присутствие прелоадера после того, как он отработал? Или какое-то другое решение проблемы
Casperovskii
Сообщения: 429
Зарегистрирован: 22 июн 2012, 17:50

Re: проблема с прелоадером

Сообщение Casperovskii »

Код в студию. Может, после загрузки стоит обнулять переменные, чтобы сборщик мусора их удалил из памяти?
chibiryaev
Сообщения: 8
Зарегистрирован: 02 дек 2011, 10:53

Re: проблема с прелоадером

Сообщение 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")]
chibiryaev
Сообщения: 8
Зарегистрирован: 02 дек 2011, 10:53

Re: проблема с прелоадером

Сообщение chibiryaev »

Частично решил эту проблему -- изменил код прелоадера, сгенеренный флешдевелопом в этой функции

Код: Выделить всё

 private function startup():void {    var mainClass:Class = getDefinitionByName("Main") as Class;    stage.addChild(new mainClass() as DisplayObject);    stage.removeChild(this);} 
Тормоза исчезли, но жёлтый прямоугольник по периметру остался, но это мелкая проблема
sanych_dv
Разработчик
Разработчик
Сообщения: 550
Зарегистрирован: 29 апр 2011, 01:52

Re: проблема с прелоадером

Сообщение 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;  
chibiryaev
Сообщения: 8
Зарегистрирован: 02 дек 2011, 10:53

Re: проблема с прелоадером

Сообщение chibiryaev »

Попробуйте в классе Main добавить
Спасибо, это помогло, прямоугольник пропал.
mastaxys
Сообщения: 32
Зарегистрирован: 12 янв 2013, 14:41

Re: проблема с прелоадером

Сообщение 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?

Если кому не трудно, расскажите какие прелоадеры Вы используете для ВКонтакте?
mastaxys
Сообщения: 32
Зарегистрирован: 12 янв 2013, 14:41

Re: проблема с прелоадером

Сообщение mastaxys »

mastaxys писал(а): Вопрос, как передать из такого прелоадера параметры flashVars?
Неужели никто не знает? ((
Ответить