2011-12-07 6 views
6

Mes applications flash sont un peu grandes, donc je veux intégrer un préchargeur dans mon application, Alors quelqu'un peut-il me dire comment créer un préchargeur dans une nouvelle 'Scene' et charger une autre scène après le préchargement terminé?Comment créer Preloader dans AS3

Merci à l'avance!

Répondre

12

Mise à jour:

Option 1. IDE Flash, un fichier swf

Pour avoir un préchargement intégré lors de la compilation avec Flash IDE, vous devez déplacer votre code Document Class à la 2e image de votre fichier FLA (sans constructeur de package et de classe, bien sûr), et supprimer le fichier Document Class. propriétés d'oject. Dans la première image vous devez placer ce code:

stop(); // stops the timeline at preloader frame 
this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
function onProgress(e:ProgressEvent):void { 
    var percent:Number = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
    //additional code to update preloader graphics 
    //.. 
    if (percent == 100) onLoaded(); 
} 
function onLoaded() { 
    this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
    nextFrame(); 
} 

Une fois swf est chargé, il passe à l'image suivante et doit être exécuté le code d'initialisation de l'application d'origine. Cela fonctionne bien si vous avez organisé votre projet de sorte que la plupart des éléments (images, etc.) se trouvent dans la bibliothèque IDE Flash et ne soient pas chargés dans la première image (vous pouvez vérifier cela dans les propriétés de chaque élément).

Option 2. IDE Flash, deux fichiers swf

Une autre option, comme cela a déjà recommandé par un autre commentateur, est de garder votre swf d'application telle qu'elle est, et créer un autre swf léger qui chargerait le premier . Le code de preloader.swf dans la première image:

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
loader.load(new URLRequest("path/to/application.swf")); 

function onProgress(e:ProgressEvent):void 
{ 
    var percent:Number = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
    //additional code to update preloader graphics 
    //.. 
    if (percent == 100) onLoaded(); 
} 
function onLoaded():void 
{ 
    loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
    var application:DisplayObject = loader.content; 
    addChild(application); 
} 

Parfois, il y a d'autres problèmes avec cette approche, lorsque vous essayez d'accéder stage de votre Document Class constructor etc, mais pour la plupart des cas, cela devrait faire le travail.

Option 3. Différents IDE, ma recommandation:FlashDevelop

Si vous avez essayé de compiler mon code initialement affichée FlashDevelop, Flash Builder ou tout autre IDE, il devrait fonctionner.

Original post:

Voici une configuration de base pour un préchargement embarqué.Votre Document Class devrait ressembler à ceci:

package { 

    import flash.display.Sprite; 

    [Frame(factoryClass='Preloader')] //class name of your preloader 

    public class Main extends Sprite { 

    public function Main() { 
     //init 
    } 
    } 
} 

Preloader Classe:

package { 

    import flash.display.DisplayObject; 
    import flash.display.MovieClip; 
    import flash.events.ProgressEvent; 
    import flash.utils.getDefinitionByName; 

    public class Preloader extends MovieClip { 

    public function Preloader() 
    { 
     //add preloader graphics 

     //check loading progress 
     this.loaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress); 
    } 
    private function onProgress(e:ProgressEvent):void 
    { 
     var percent:Number = Math.round(e.bytesLoaded/e.bytesTotal * 100); 
     if (percent == 100) 
     { 
      this.loaderInfo.removeEventListener(ProgressEvent.PROGRESS, onProgress); 
      onLoaded(); 
     } 
    } 
    private function onLoaded():void 
    { 
     nextFrame(); //go to next frame 
     var App:Class = getDefinitionByName("Main") as Class; //class of your app 
     addChild(new App() as DisplayObject); 
    } 
    } 
} 
+0

fonction OnProgress n'exécute pas .... :( –

+0

-vous obtenir des erreurs? Pouvez-vous montrer votre code concernant préchargement et l'initialisation de votre document 'cLASS'? – package

+0

pas i N'obtenez aucun message d'erreur et mon docum classe est exactement la même chose que ce que vous avez dit. –

0

Vous pouvez également utiliser la bibliothèque 3ème partie comme GreenSock pour précharger avant les fichiers démarrage de l'application et pendant l'application sont en cours de chargement. J'utilise personnellement Greensock et le recommande. Il résout certains bogues avec la classe loaderInfo.

http://www.greensock.com/loadermax/

0

[Cadre (factoryClass = 'Preloader')] ne fonctionne plus dans le nouveau compilateur ASC 2.0. Au lieu de cela, le préchargeur devient votre classe de document et vous devez ajouter un argument de compilateur supplémentaire pour indiquer à flash d'inclure votre classe principale sur la seconde image (ne le référencez pas dans le préchargeur):

-frame = NameDoesntMatter, Main

Does ASC 2.0 recognize [Frame] metadata tags (ex: for Preloader factoryClass)?

ASC2.0 and Frame metatag