1

您好想知道添加预加载器的最佳方法。然后在加载内容时创建 Starling 框架的实例。这是我所拥有的:

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

}

这是预加载器类:

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 类?预加载器只是一个列出加载内容的文本字段,这应该允许应用程序更快地加载。

4

1 回答 1

1

您不认为创建一个外部 SWF 来预加载您的游戏会更有意义吗?它总是比将预加载器合并到您的主游戏文件中更好的解决方案。

于 2013-11-12T16:38:36.820 回答