Aggiornamento:
Opzione 1. IDE Flash, un file SWF
di avere un preloader incorporato quando si compila con Flash IDE, dovresti spostare il tuo codice Document Class
in 2 ° fotogramma del tuo file FLA (senza costruttore di pacchetti e classi, ovviamente), e rimuovere il file Document Class
.as da pr proprietà di oject. Nel primo frame è necessario posizionare tale codice:
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();
}
volta SWF viene caricato, esso avanza al fotogramma successivo e deve essere eseguito il codice di inizializzazione applicazione originale. Questo funziona bene se hai organizzato il tuo progetto in modo che la maggior parte delle risorse (immagini, ecc.) Siano nella libreria Flash IDE e non siano caricate sul primo fotogramma (puoi verificarlo nelle proprietà di ciascuna libreria).
Opzione 2. IDE Flash, due file SWF
un'altra opzione, come già consigliato da un altro commentatore, è quello di mantenere il vostro swf applicazione così com'è, e creare un altro swf leggero che avrebbe caricare il primo . Il codice di preloader.swf nel primo fotogramma:
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);
}
a volte ci sono altri problemi con questo approccio, quando si tenta di accedere stage
dal Document Class constructor
ecc, ma per la maggior parte dei casi questo dovrebbe fare il lavoro.
Opzione 3. Differente IDE, la mia raccomandazione:FlashDevelop
Se si è tentato di compilare il mio codice originariamente pubblicato con FlashDevelop, Flash Builder o qualsiasi altro IDE, dovrebbe funzionare.
Original post:
Ecco un setup di base per un preloader incorporato.Il tuo Document Class
dovrebbe assomigliare a questo:
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);
}
}
}
funzione OnProgress non è in esecuzione .... :( –
si fa a ottenere eventuali errori? Riesci a mostrare il vostro codice in materia di precarico e l'inizializzazione del 'documento class'? – package
No non ottenere alcun messaggio di errore e il mio docum la classe è esattamente la stessa di qualunque cosa tu abbia detto. –