Просмотр полной версии : Не могу сделать прелоадер
WaldeMar1321
26.09.2015, 16:23
Здравствуйте, пытаюсь сделать внутренний прелоадер для уже готовой игры.
В конструкторе Main есть
loaderInfo.addEventListener(ProgressEvent.PROGRESS, filling);
loaderInfo.addEventListener(Event.COMPLETE, filled);
проблема в том что в функции filling, в первом в нее заходе, var a:uint = event.bytesLoaded;
var b:uint = event.bytesTotal;
trace(a, b);
//a == b почему-то
Также если в любом другом месте программы написать trace(loaderInfo.bytesTotal);
число будет таким-же самым.
По идее он ведь должен загружать частями а не за раз. Может приложение слишком маленькое (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);
}
}
}
А ваш Main класс, нужно немного изменить, прописав "внедрение кадра"
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 кб действительно мало, чтобы загружалось порциями.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.