Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   loaderInfo, Embed и прогресс загрузки. (http://www.flasher.ru/forum/showthread.php?t=186594)

Sintesis 06.11.2012 00:44

loaderInfo, Embed и прогресс загрузки.
 
Можно ли как-то отследить загрузку флешки самой себя? Есть класс со встроенными изображениями и и класс документ класс.
Код AS3:

package resources{
 
        public class Store{
                [Embed(source = "../../store/menu/2011-11-22 17.15.35.jpg")] static private const img01:Class;
                [Embed(source = "../../store/menu/2011-11-22 19.30.37.jpg")] static private const img02:Class;
                [Embed(source = "../../store/menu/2011-12-19 13.30.21.jpg")] static private const img03:Class;
                [Embed(source = "../../store/menu/2012-02-04 15.58.52.jpg")] static private const img04:Class;
                [Embed(source = "../../store/menu/2012-02-24 17.26.25.jpg")] static private const img05:Class;
                [Embed(source = "../../store/menu/2012-03-05 11.01.04.jpg")] static private const img06:Class;
                [Embed(source = "../../store/menu/2012-03-25 16.11.18.jpg")] static private const img07:Class;
 
                public function Store() {
 
                }
        }
}

Код AS3:

package {
        import flash.display.LoaderInfo;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.ProgressEvent;
        import resources.Store;
 
        public class MainClass extends Sprite {
 
                public function MainClass() {
                        super();
                        addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(_event:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        var store:Store = new Store();
                        loaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
                }
 
                private function progressListener(_event:ProgressEvent):void {
                        trace(_event.bytesLoaded);
                }
        }
}

Добавлено через 20 минут
То что предлагает FD не хочется использовать
Код AS3:

[Frame(factoryClass="Preloader")]

Добавлено через 48 минут
А если сделать так как у меня, то trace(_event.bytesLoaded); показывает что загрузка уже произошла.

illuzor 06.11.2012 01:39

Стандартный класс из fd от проекта as3 project with preloader прекрасно работает.
Только прогресс загрузки нужно отлавливать в классе прелоадера, а не в Main

Код 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.ProgressEvent;
        import flash.utils.getDefinitionByName;
 
        public class Preloader extends MovieClip {
 
                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);
 
                }
 
                private function progress(e:ProgressEvent):void {
                        trace(e.bytesLoaded / e.bytesTotal);
                }
 
                private function checkFrame(e:Event):void {
                        if (currentFrame == totalFrames) {
                                stop();
                                removeEventListener(Event.ENTER_FRAME, checkFrame);
                                loaderInfo.removeEventListener(ProgressEvent.PROGRESS, progress);
                                var mainClass:Class = getDefinitionByName("Main") as Class;
                                addChild(new mainClass() as DisplayObject);
                        }
                }
 
        }
}

Код AS3:

package {
 
        import flash.display.Sprite;
        import flash.events.Event;
 
        [Frame(factoryClass="Preloader")]
        public class Main extends Sprite {
 
                public function Main():void {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // точка входа в программу тут
                }
 
        }
 
}


Sintesis 06.11.2012 01:49

Да понимаю, что нормально работает, но какая-то конструкция, такая... не нравится, неужели в самой себе нельзя прослушать?

AlexLucas 06.11.2012 02:10

Тогда наверное только так. Но вам придётся пользовать mxml.

Sintesis 06.11.2012 02:35

Видимо прийдётся послушать FlashDevelop и не выдумывать...


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

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