Форум 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=211589)

WaldeMar1321 26.09.2015 16:23

Не могу сделать прелоадер
 
Здравствуйте, пытаюсь сделать внутренний прелоадер для уже готовой игры.
В конструкторе Main есть

Код AS3:

loaderInfo.addEventListener(ProgressEvent.PROGRESS, filling);
loaderInfo.addEventListener(Event.COMPLETE, filled);

проблема в том что в функции filling, в первом в нее заходе,
Код AS3:

var a:uint = event.bytesLoaded;
var b:uint = event.bytesTotal;
trace(a, b);
//a == b почему-то

Также если в любом другом месте программы написать
Код AS3:

trace(loaderInfo.bytesTotal);

число будет таким-же самым.
По идее он ведь должен загружать частями а не за раз. Может приложение слишком маленькое (900кб)?

Приложение работает нормально. Писал исключительно в классах, то есть не в кадрах.
Не понимаю. Может есть мысли на этот счет.
Спасибо.

samana 26.09.2015 16:44

Если я правильно помню, то внутренний прелоадер будет корректно работать, если есть хотя бы несколько кадров.
Попробуйте воспользоваться шаблоном из FlashDevelop. Здесь программно создаётся первый кадр для прелоадера, и второй - для 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.IOErrorEvent;
        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);
                        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
                        trace(loaderInfo.bytesLoaded);
                }
 
                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
                {
                        var mainClass:Class = getDefinitionByName("Main") as Class;
                        addChild(new mainClass() as DisplayObject);
                }
 
        }
 
}

А ваш Main класс, нужно немного изменить, прописав "внедрение кадра"
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.ProgressEvent;
 
        [Frame(factoryClass="Preloader")] // <------------
        public class Main extends Sprite
        {
 
                public function Main()
                {
                        // ваша игра
                }
 
        }
 
}

Важно: документ классом, по-прежнему нужно оставить Main класс, а не класс прелоадера.
Но 900 кб действительно мало, чтобы загружалось порциями.


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

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