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);
}
}
}
funkcja onProgress nie wykonuje .... :( –
Czy masz jakieś błędy? Czy możesz pokazać swój kod dotyczące obciążenia wstępnego i inicjalizacji swojej 'Dokument Class'? – package
no i Nie dostaję żadnego komunikatu o błędzie i mojego dokumentu Klasa ent jest dokładnie taka sama, jak ci powiedziano. –