Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прелоадер кода в классах (http://www.flasher.ru/forum/showthread.php?t=210573)

Фомич 01.04.2015 00:11

Прелоадер кода в классах
 
Приветствую! Перечитал кучу тем по части создания такого прелоадера, но нужной информации не нашел (да, читал и темы с этого форума, в которые вы можете перенаправить). История такова, что осваивая FD пришел к решению подгрузить вот такую строчку перед классом прелоадера: [Frame(factoryClass="src.Preloader")] и мой драгоценный класс Main наконец то заработает. Тестирую на сервере через сеть, закидывая скомпилированное туда, но прелоадер не появляется. Трейсы из него не видны.

src.Main

Код AS3:

package src 
{
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.display.Sprite;
        import flash.display.DisplayObject;
 
 
    [SWF(width="600", height="500", backgroundColor="#1a1a1a")] //кажется строку эту не видит
    [Frame(factoryClass="src.Preloader")]// эту строчку игнорирует
 
 
        public class Main extends Sprite
        {
 
                public function Main()
 
 
                {
 
 
                if (stage) init();
      else addEventListener(Event.ADDED_TO_STAGE, init);
 
 
 
 
 
                }//fun Main
 
                public function init(e:Event = null):void
          {
 
            removeEventListener(Event.ADDED_TO_STAGE, init);
 
 
        здесь начинается загрузка вторичных классов addChild(...);
 
 
                }

src.Preloader

Код AS3:

package src
{
        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.ProgressEvent;
        import flash.utils.getDefinitionByName;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.display.LoaderInfo;
 
        public class Preloader extends MovieClip
        {
 
    private var preloader_text:TextField;
    private var swf_w:int=600;
    private var swf_h:int=500;
 
                public function Preloader()
                {
                    trace("Oh mein Gott!");//чуда не произошло
 
                        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);
 
                        // Прелоадер - визуальная часть
            preloader_text=new TextField();
            preloader_text.text="Load 0 % ";
            preloader_text.textColor=0xA0A0A0;
            preloader_text.selectable=false;
            preloader_text.autoSize=TextFieldAutoSize.CENTER;
            preloader_text.x=swf_w/2-preloader_text.width/2;
            preloader_text.y=swf_h/2;
            addChild(preloader_text);
                }
 
                private function ioError(e:IOErrorEvent):void
                {
                        trace(e.text);
                }
 
                private function progress(e:ProgressEvent):void
                {
                        // Update loader
                        preloader_text.text="Load "+(Math.round((loaderInfo.bytesLoaded*100)/loaderInfo.bytesTotal))+" %";
                }
 
                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);
 
                        // Спрятать прелоадер
                        preloader_text.visible=false;
 
                        startup();
                }
 
                private function startup():void
                {
                        var mainClass:Class = getDefinitionByName("Main") as Class;// пробовал с "src.Main" но не пошло тоже
                        if (parent == stage) stage.addChildAt(new mainClass() as DisplayObject, 0);
                        else addChildAt(new mainClass() as DisplayObject, 0);
                }
 
        }
 
}

В настройках компилятора Project -> Properties -> Compiler Options -> Additional Compiler Options пробовал дописывать: -frame two Main , но результат отрицательный.

Wolsh 01.04.2015 02:33

1. Надеюсь Вы компилили, указав прелоадер как Document Class? ))) Да и проект то выбран "AS3 with Preloader"?
2.
Цитата:

// пробовал с "src.Main" но
это обязательно.

Фомич 01.04.2015 10:39

1. И поэтому не получалось?) [Frame(factoryClass="src.Preloader")] у меня в классе Main, его и указывал класом документа. Насчет "AS3 with Preloader" вы оказались правы, перенес проект туда и разобравшись со структурой(дополнительно сгенерил swc) удалось проект запустить как надо. Ура!
Спасибо за наводку.


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

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