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);
}
}
}
fonction OnProgress n'exécute pas .... :( –
-vous obtenir des erreurs? Pouvez-vous montrer votre code concernant préchargement et l'initialisation de votre document 'cLASS'? – package
pas i N'obtenez aucun message d'erreur et mon docum classe est exactement la même chose que ce que vous avez dit. –