Flash player попытается перейти к кадру 20. Но он будет идти только до загруженных кадров. Так что, если вы скажете, что нужно перейти к 20, а загружено только 10, вы перейдете к 10.
Вызов ресурсов в коде, который не был загружен, либо выдаст ошибку, либо определит этот объект как нулевой. Излишне говорить, что этого следует избегать. Сначала загрузите эти ресурсы.
Хорошим решением является использование аргумента компилятора -frame для создания 2-кадрового флэш-фильма. первый содержит ваш preloader, а второй кадр содержит полное приложение. таким образом, вы можете предварительно загрузить то, что вам нужно, прежде чем потребуется полная функциональность.
Вот пример, как это сделать.
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;
/**
* ...
* @author Zachary Foley
*/
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
}
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);
}
}
}
Чтобы использовать это, вам нужно добавить аргумент фрейма в вашу сборку. Для этого примера аргумент фрейма будет:
-frame start Main