0

我正在用 AS3 制作冒险游戏,并且有很多课程。我听说如果只有一个 Enter Frame 函数并且所有更新函数都从该函数运行,则性能最好。

我目前在我的 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():无效;
   }
}

在您的主游戏循环中,只需切换应更新哪些对象:

包裹{
   公共类 Main 扩展 MovieClip 实现 IUpdateable {
     受保护的 var updateChildren:向量。= 新向量.();
     //其他逻辑将管理谁当前可更新,谁不可更新
     公共函数doUpdate():无效{
        对于每个 (var updateable:IUpdateable) {
           可更新的.doUpdate();
        }
     }
   }
}

那么,如果有子组件需要更新,也可以是IUpdateable,更高级别的IUpdateable可以调用该方法。

于 2013-03-10T14:47:03.920 回答