Skip to content

AS3 Application Preloading

2007 November 21
by Sven Busse

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.

Share this:
  • email
  • Twitter
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Posterous
  • Digg
  • Technorati
  • Slashdot
  • Suggest to Techmeme via Twitter
  • StumbleUpon
  • Reddit
  • Netvibes
  • LinkedIn
  • Mixx
No comments yet

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS