Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   ProgressEvent (http://www.flasher.ru/forum/showthread.php?t=156991)

stweet 30.05.2011 05:13

ProgressEvent
 
Код AS3:

package  
{
        import flash.display.Sprite;
        import flash.events.ProgressEvent;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh1:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh2:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh3:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh4:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh5:Class;
 
                private var total        :Number = 0;
                private var load        :Number = 0;
 
                public function Main()
                {
                        var spr1:Sprite = new Sprite();
                        var spr2:Sprite = new Sprite();
                        var spr3:Sprite = new Sprite();
                        var spr4:Sprite = new Sprite();
                        var spr5:Sprite = new Sprite();
 
                        spr1.addChild(new oh1());
                        spr2.addChild(new oh2());
                        spr3.addChild(new oh3());
                        spr4.addChild(new oh4());
                        spr5.addChild(new oh5());
 
                        addChild(spr1);
                        addChild(spr2);
                        addChild(spr3);
                        addChild(spr4);
                        addChild(spr5);
 
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                        loaderInfo.addEventListener(Event.COMPLETE, completeHandler);
                        loaderInfo.addEventListener(Event.INIT, initHandler);
                }
 
                private function completeHandler(e:Event):void
                {
                        trace("completeHandler");
 
                        addEventListener(Event.ENTER_FRAME, enterFrameHandler);
                }
 
                private function enterFrameHandler(e:Event):void
                {
                        if (load >= total)
                        {
                                trace("complete!");
 
                                removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
                                return;
                        }
                }
 
                private function progressHandler(e:ProgressEvent):void
                {
                        total        = e.bytesTotal;
                        load        = e.bytesLoaded;
 
                        trace("progressHandler: " + load + " / " + total);
                }
 
                private function initHandler(e:Event):void
                {
                        trace("initHandler");
                }
        }
}
 
/* trace ==>
 *
 * initHandler
 * progressHandler: 1969036 / 1969036
 * completeHandler
 * complete!
 *
 **/

Вся флэшка весит 20 метров и грузится 10-20 секунд а в трейсе только итог. Или я не втыкаю в суть прелоадеров или лыжи не едут.

Луди, дайте понять, как запустить приложение и увидеть этот процесс загрузки.
Читал мануал про астеройды в шапке форума не понял ни чего, нельзя описать где нить без КАДРОВ и ВРЕМЕННОЙ ШКАЛЫ?
Уже аж раздражает что моя пустая голова не может вразумить элементарного.

Видел флэшки 2-3 метра всё равно прогресс бар пробегает заметно не вооружённым глазом у меня же только после компиляции в трейс отпишет и сразу ролик запускает, и на серв скидывал, всё не так.

Как мне отследить процесс загрузки самого ролика?

Флекс и тот элементарный (пустой) стейдж прогрессирует что тоже заметно. Я даже пробовал создать 30 000 спрайтов 800х600, прогресса ни какого, сам плеер запускается только после того как полностью прогрузится. Ни фига не могу понять!

Заранее, очень буду БЛАГОДАРЕН за помощь!

Gaen 30.05.2011 05:42

Без кадров, к сожалению, не обойтись.
http://etcs.ru/blog/as1/export_in_se...ame_flash_cs3/

Dukobpa3 30.05.2011 05:45

Судя по всему мейн из флешДевелопа, так кто же помешал создать проект с прелоаедером? Там уже люди подумали за вас.

И матерился бы поменьше, выхватишь пару плюсов. Звездочки вопроса не решают ;)
Код AS3:

package  
{
        import flash.display.Sprite;
        import flash.events.ProgressEvent;
        import flash.events.Event;
 
        /**
        * вот эта штука вставляет класс с именем Preloader
        * в кадр который следует перед мейном
        */

        [Frame(factoryClass="Preloader")]
        public class Main extends Sprite
        {
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh1:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh2:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh3:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh4:Class;
                [Embed(source = '../bin/DSC_5350.JPG')] private var oh5:Class;
 
                private var total        :Number = 0;
                private var load        :Number = 0;
 
                public function Main()
                {
                        var spr1:Sprite = new Sprite();
                        var spr2:Sprite = new Sprite();
                        var spr3:Sprite = new Sprite();
                        var spr4:Sprite = new Sprite();
                        var spr5:Sprite = new Sprite();
 
                        spr1.addChild(new oh1());
                        spr2.addChild(new oh2());
                        spr3.addChild(new oh3());
                        spr4.addChild(new oh4());
                        spr5.addChild(new oh5());
 
                        addChild(spr1);
                        addChild(spr2);
                        addChild(spr3);
                        addChild(spr4);
                        addChild(spr5);
 
                        //Убираем листенеры отсюда
                }
 
        }
}

А вот собственно и сам прелоадер, Всё вот эти вот прогресс ивенты тут.
Код AS3:

package 
{
        import flash.display.DisplayObject;
        import flash.display.MovieClip;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.IOErrorEvent;
        import flash.events.MouseEvent;
        import flash.events.ProgressEvent;
        import flash.text.TextField;
        import flash.utils.getDefinitionByName;
 
        /**
        * ...
        * @author Dukobpa3
        */

        public class Preloader extends MovieClip
        {
 
                private var tf:TextField = new TextField();
 
                private var pourc:int = 0;
 
                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);
 
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
 
                        this.addChild(tf);
 
                }
 
                private function onMouseMove(e:MouseEvent):void
                {
                        tf.x = mouseX + 20;
                        tf.y = mouseY;
                }
 
                private function ioError(e:IOErrorEvent):void
                {
                        trace(e.text);
                }
 
                private function progress(e:ProgressEvent):void
                {
                        // TODO update loader
 
                        pourc = e.bytesLoaded / e.bytesTotal * 100;
 
                        tf.text = pourc.toString(10);
                }
 
                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);
 
                        startup();
                }
 
                private function startup():void
                {
                        this.removeChild(tf);
 
                        //this.stage.addChild(new FlashPreloadProfiler());
 
                        var mainClass:Class = getDefinitionByName("MVCMain") as Class;
                        addChild(new mainClass() as DisplayObject);
 
                }
 
        }
 
}


stweet 30.05.2011 06:16

Спасибо народ, извините за звёздочки, просто не мог найти более менее нормального прелоадера. Ещё раз спасибо и за пример и за толкование.

Heavy 12.07.2011 11:09

Здравствуйте, у меня аналогичная проблема с пониманием системы работы прелоадера. Возможно потомучто никогда не программировал в кадрах и не пойму как это работает. Пишу также на FD, но пример Dukobpa3 не запустился полноценно что вызвало вопросы:
Во-первых не отобразились загруженные картинки, хотя у курсора отображается "100".
Во-вторых не понятна функция startup (маловато опыта программирования) в которой выдается ошибка "Не определена переменная "MVCMain", для меня загадка что это.
В-третих, хотелось бы уточнить где будет продолжатся сама программа после завершения загрузки, логика подсказывает что в main'е.

alatar 12.07.2011 11:53

Цитата:

Возможно потомучто никогда не программировал в кадрах и не пойму как это работает.
Дело не в программировании в кадрах, а в конструкции swf и в том, как флеш-плеер с ним работает.
Цитата:

Во-вторых не понятна функция startup (маловато опыта программирования) в которой выдается ошибка "Не определена переменная "MVCMain", для меня загадка что это.
Вместо "MVCMain" вы должны прописать имя класса вашего "main'e".
Цитата:

В-третих, хотелось бы уточнить где будет продолжатся сама программа после завершения загрузки, логика подсказывает что в main'е.
Там и продолжится.

Heavy 12.07.2011 12:34

А если походу программы нужно будет вызвать еще один прелоадер, как это нужно обозначать в Main, и нужно ли писать еще один класс дляпрелоадера или можно какимто образом воспользоваться тем же самым.

alatar 12.07.2011 12:37

Тем же самым не получится. Но вы кажется путаете понятия прелоадера и прогрессбара.

Heavy 12.07.2011 12:53

Судя по всему действительно путаю, и тогда не помайму, в чем смысл и плюс прелоадера, если в основном классе можно сделать прогрессбар, хотя у топикстартера это не получилось.

alatar 12.07.2011 13:02

Прелоадер загружается и выполняется первым, до того как загружены все ресурсы. В основном классе вы можете сделать прогрессбар, но код его выполнится только после того, как загрузится вся флешка и показывать будет уже нечего.


Часовой пояс GMT +4, время: 05:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.