2011-12-07 16 views
6

Moje aplikacje flashowe są trochę za duże, więc chcę umieścić preloadera w mojej aplikacji, . Czy ktoś może mi powiedzieć, jak utworzyć preloader w nowej 'Scene' i załadować kolejną scenę po zakończeniu wstępnego ładowania?Jak utworzyć ładowanie wstępne w AS3

Z góry dziękuję!

Odpowiedz

12

Aktualizacja:

Wariant 1. Flash IDE, jeden plik SWF

Aby mieć wbudowany preloader przy kompilacji z Flash IDE, powinieneś przenieść kod Document Class do drugiej klatki pliku FLA (bez oczywiście konstruktora pakietu i klasy) i usunąć plik Document Class .as z pr właściwości oject. W pierwszej klatce należy umieścić taki kod:

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(); 
} 

Po SWF jest załadowany, to przejście do następnej klatki i oryginalna aplikacja kod inicjujący powinien być wykonywany. Działa to dobrze, jeśli zorganizowałeś swój projekt w taki sposób, że większość zasobów (obrazów itp.) Znajduje się w bibliotece Flash IDE i nie jest wczytywana w pierwszej klatce (możesz to sprawdzić we właściwościach każdej właściwości biblioteki).

Wariant 2. Flash IDE, dwa pliki SWF

Inną opcją, jak już zalecany przez innego commenter, to aby utrzymać SWF aplikacji, jak jest, i utworzyć inną lekką swf, które załadować pierwszy . Kodeks preloader.swf w pierwszej klatce:

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); 
} 

Czasami istnieją dodatkowe problemy z tym podejściem, podczas próby uzyskania dostępu stage z Twojego Document Class constructor itp, ale w większości przypadków powinno to załatwić sprawę.

Opcja 3. Different IDE, moje zalecenie:FlashDevelop

Jeśli próbowali skompilować mój Cytat kod z FlashDevelop, Flash Builder lub innego IDE, to powinno działać.

Original post:

Oto podstawowa konfiguracja dla osadzonego preloader.Twój Document Class powinna wyglądać następująco:

package { 

    import flash.display.Sprite; 

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

    public class Main extends Sprite { 

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

Preloader Klasa:

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

funkcja onProgress nie wykonuje .... :( –

+0

Czy masz jakieś błędy? Czy możesz pokazać swój kod dotyczące obciążenia wstępnego i inicjalizacji swojej 'Dokument Class'? – package

+0

no i Nie dostaję żadnego komunikatu o błędzie i mojego dokumentu Klasa ent jest dokładnie taka sama, jak ci powiedziano. –

0

Można również użyć 3rd biblioteki strona jak Greensock do wstępnego ładowania zarówno przed rozpoczęciem aplikacji i podczas stosowania plików ładowanego.

Osobiście korzystam Greensock i polecam go. Rozwiązuje niektóre błędy z klasą loaderInfo.

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