2013-08-26 31 views
1

您好想知道添加預加載器的最佳方法。然後當內容被加載時創建一個Starling框架的實例。以下是我有:將Starling與Preloader合併的正確方法

import flash.display.Loader; 
import flash.display.Sprite; 
import flash.events.Event; 
import loaders.Preloader; 
import starling.core.Starling;  

//main class container 
public class Game extends Sprite 
{ 
    //preloader class 
    private var _loader:Preloader; 

    //starling instance 
    private var _starling:Starling; 

    //constructor to initialise game 
    public function Game():void 
    { 
     this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage) 
    } 

    private function onAddedToStage(e:Event):void 
    { 
     this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

     _loader = new Preloader(); 
     addChild(_loader); 

     _loader.addEventListener("loaded_game", onGameLoaded); 
    } 

    private function onGameLoaded(e:Event):void 
    { 
     trace("game loaded"); 
     _starling = new Starling(Game,stage,null,null,"auto","baseline"); 
     _starling.start(); 
    } 

} 

這是Preloader類:

package loaders 
{ 
import flash.events.Event; 
import flash.display.Sprite; 
import flash.text.TextField; 
import flash.text.TextFieldAutoSize; 

public class Preloader extends Sprite 
{ 
    private var textLoaded:TextField; 

    public function Preloader() 
    { 
     this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 
    } 

    private function onAddedToStage(event:Event):void 
    { 
     // remove added to stage listener 
     this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); 

     textLoaded = new TextField(); 
     textLoaded.x = 300; 
     textLoaded.y = 300; 
     textLoaded.border = true; 
     textLoaded.autoSize = "center"; 
     addChild(textLoaded); 

     //loop current load state 
     this.addEventListener(Event.ENTER_FRAME, loadGame); 
     this.addEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage); 
    } 

    private function onRemovedFromStage(event:Event):void { 
     this.removeEventListener(Event.ENTER_FRAME, loadGame); 
     this.removeEventListener(Event.REMOVED_FROM_STAGE, onRemovedFromStage); 
    } 

    private function loadGame(e:Event):void 
    { 
     //vars 
     var total:Number = parent.stage.loaderInfo.bytesTotal; 
     var loaded:Number = parent.stage.loaderInfo.bytesLoaded; 

     textLoaded.text = Math.floor((loaded/total)* 100) + "%"; 

     if (total == loaded) 
     { 
      this.removeEventListener(Event.ENTER_FRAME, loadGame); 
      dispatchEvent(new Event("loaded_game", true)); 
     } 
    } 

}//end of class 

}

這是做的最好的辦法還是有一個更高效,實用的選擇?正如你可以看到我在實例化Starling之前使用Flash類? Preloader只是一個文本字段,列出了加載的內容,這將使應用程序加載速度更快。

回答

1

難道你不覺得創建一個外部SWF來預裝你的遊戲會更有意義嗎?與將預加載器合併到主遊戲文件中相比,它總是更好的解決方案。

相關問題