AS3 Application Preloading
Juten Tach,
[Update]: I have translated this article to english here.
mein Kollege Lars hat in seinem Beitrag beschrieben, wie man mit dem [Frame] Tag und einer Factory Klasse seine Hauptapplikation vorladen kann, indem man Klassen auf mehrere Frames verteilt. Jetzt hab’ ich auch nochmal ein wenig recherchiert und die korrespondierende compiler-option Lösung dazu gefunden.
Also, folgende beide Klassen seien gegeben:
Die Hauptklasse:
package {
import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.getDefinitionByName;
public class Test extends MovieClip {
public function Test() {
stop();
addEventListener(
Event.ENTER_FRAME,
onEnterFrame
);
}
public function onEnterFrame(event:Event):void {
if(framesLoaded == totalFrames) {
removeEventListener(
Event.ENTER_FRAME,
onEnterFrame
);
nextFrame();
init();
}else {
// Show loading stuff here.
}
}
private function init():void {
var mainClass:Class = Class(
getDefinitionByName("Demo")
);
if(mainClass) {
var app:Object = new mainClass();
addChild(app as DisplayObject);
}
}
}
}
Und die eigentliche Applikationsklasse, die dann im zweiten Frame zum Zuge kommt:
package {
import flash.display.Bitmap;
import flash.display.Sprite;
public class Demo extends Sprite {
[Embed(source="somepicture.jpg")]
private var picture:Class;
public function Demo() {
init();
}
private function init():void {
trace("Hello Demo");
var asset:Bitmap = new picture();
addChild(asset);
}
}
}
Der wichtigste Teil kommt aber jetzt, nämlich folgende compiler Option, die man hinzufügt:
-frame two Demo
Das führt jetzt ganz simpel dazu, dass die Klasse Demo in einem zweiten Frame mit dem label “two” platziert wird. Die “-frame” compiler Option kann man beliebig wiederholen, um z.B. weitere Frames oder weitere Klassen in einen bestimmten Frame unterzubringen. Der Vorteil hier ist, dass durch das Verwenden dieser compiler Option nicht plötzlich unendlich viele Flex Klassen mit reinkompiliert werden. Alles bleibt rank und schlank.
Leider verursacht nun noch der Embed Tag in meiner Klasse “Demo”, dass ein paar Flex Klassen und Interfaces reinkompiliert werden, aber dagegen kann man wohl nach bisherigem Kenntnisstand tatsächlich nichts unternehmen. Schade, weil die reinkompilierten Klassen mir nicht danach ausschauen, als würde man sie wirklich zwingend brauchen, wenn man sich diese Klassen als Source mal ansieht. Ein simples Bitmap Objekt hätte es auch getan.

