0

AS3でアドベンチャーゲームを作っており、たくさんのクラスがあります。Enter Frame関数が1つだけで、そこからすべての更新関数が実行されると、パフォーマンスが最適になると聞きました。

現在、main.asにmainGameLoopがありますが、この単一のフレーム入力関数から実行される更新関数をすべてのクラスに含めるための最良の方法は何ですか?

これは、Playerクラスで更新関数を実行するために行った例ですが、このソリューションはまったく好きではありません。

誰かがそれを助けることができればそれは大いに感謝されるでしょう、ありがとう。

public class Main extends MovieClip
{
    // Initialising variables...
    private var m_SceneHandler:SceneHandler;
    private var m_UserInput:UserInput;

    public function Main()
    {
        // Adding main update function...
        addEventListener( Event.ENTER_FRAME, mainGameLoop );

        // Creating the scene handler...
        m_SceneHandler = new SceneHandler();
        addChild( m_SceneHandler );
    }

    private function mainGameLoop( event:Event )
    {
        doUpdate();
    }

    private function doUpdate():void
    {
        // Update player...
        if (m_SceneHandler.m_aCurrentScene[0].m_Player)
        {
             m_SceneHandler.m_aCurrentScene[0].m_Player.doUpdate();
        }       

}
4

1 に答える 1

1

複合パターンとコードをIUpdateableインターフェイスに使用します。

パッケージビュー{
   パブリックインターフェイスIUpdateable{
      関数doUpdate():void;
   }
}

メインのゲームループで、更新するオブジェクトを切り替えるだけです。

パッケージ{
   パブリッククラスMainはMovieClipを拡張し、IUpdateableを実装します{
     保護された変数updateChildren:Vector。=新しいVector。();
     //他のロジックは、現在更新可能なユーザーと更新できないユーザーを管理します
     パブリック関数doUpdate():void {
        それぞれ(var updateable:IUpdateable){
           updateable.doUpdate();
        }
     }
   }
}

次に、更新する必要のあるサブコンポーネントがある場合、それらもIUpdateableである可能性があり、より高いレベルのIUpdateableがメソッドを呼び出す可能性があります。

于 2013-03-10T14:47:03.920 に答える