|
|
|||||
Регистрация: Mar 2015
Сообщений: 26
|
Не могу сделать прелоадер
Здравствуйте, пытаюсь сделать внутренний прелоадер для уже готовой игры.
В конструкторе Main есть loaderInfo.addEventListener(ProgressEvent.PROGRESS, filling); loaderInfo.addEventListener(Event.COMPLETE, filled); var a:uint = event.bytesLoaded; var b:uint = event.bytesTotal; trace(a, b); //a == b почему-то По идее он ведь должен загружать частями а не за раз. Может приложение слишком маленькое (900кб)? Приложение работает нормально. Писал исключительно в классах, то есть не в кадрах. Не понимаю. Может есть мысли на этот счет. Спасибо. |
|
|||||
Если я правильно помню, то внутренний прелоадер будет корректно работать, если есть хотя бы несколько кадров.
Попробуйте воспользоваться шаблоном из FlashDevelop. Здесь программно создаётся первый кадр для прелоадера, и второй - для main класса. В общем сам шаблон (лишнее конечно можете убрать): 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); } } } package { import flash.display.Sprite; import flash.events.Event; import flash.events.ProgressEvent; [Frame(factoryClass="Preloader")] // <------------ public class Main extends Sprite { public function Main() { // ваша игра } } } Но 900 кб действительно мало, чтобы загружалось порциями. |
Часовой пояс GMT +4, время: 07:31. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , preloader |
|
|