我正在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();
}
}
答案 0 :(得分:1)
将复合模式和代码用于IUpdateable接口。
package view { public interface IUpdateable { function doUpdate():void; } }
在主游戏循环中,只需切换出应更新的对象:
package{ public class Main extends MovieClip implements IUpdateable { protected var updateChildren:Vector. = new Vector.(); //other logic would manage who is currently updateable and who is not public function doUpdate():void { for each (var updateable:IUpdateable) { updateable.doUpdate(); } } } }
然后,如果有子组件需要更新,它们也可以是IUpdateable,更高级别的IUpdateable可以调用该方法。