AS3中的游戏架构

时间:2013-10-10 13:37:35

标签: actionscript-3 flash architecture starling-framework

我现在使用starling框架在flash中进行游戏。但是我对游戏中的建筑很陌生,我认为我在游戏中所做的并不是很好。

我有一个Screen类,用于显示要播放的内容。

public class Screen {
    private var button : Button
    private var controller : Controller

    public function Screen(){
       controller = new Controller(button)
    }
}

public class Button{
    private var controller : Controller
    private var button: Button

    public function Button(){
       button.addEventListener(Event.TRIGGERED, onTrigger)
    }

    private function onTrigger(e:Event){
       controller.notify(buttonTriggered);
    }
}
//in the controller class, I have a list of controller which controls other components 
//those are added to Screen class (character, ...) 
public class Controller{
   public function Controller(button){

   }

   public function notify(event){
      switch(event){
         //notify to other controller with this event
      }
   }
}

您对此架构有任何建议吗?非常感谢您的所有反馈。

2 个答案:

答案 0 :(得分:1)

我为gazman-sdk.com中的屏幕创建了一个很棒的解决方案。

当您考虑屏幕机制时,它的主要任务是什么:

  • 管理屏幕堆栈
  • 通过堆栈更改通知屏幕:
    • 当屏幕到达堆栈顶部时调用on resume
    • 当屏幕不再位于堆栈顶部时调用on pause
    • 在创建屏幕时调用on create,在屏幕被销毁时调用dispose
  • 此外,您还希望将屏幕逻辑封装在屏幕内部。因此,您的代码不会包含以下行:opneScreen(new GameScreen());。因为调用此方法的班级知道谁是GameScreen,并且您想避免这种情况。
  • 最后,当您的屏幕机制启动并运行时,您不想为弹出窗口编写另一个相同的机制,因为它几乎相同。

我使用Multiton pattern构建解决方案,它具有屏幕堆栈模型的多重表示,用于弹出窗口和屏幕。每个屏幕都被封装,并通过收听系统事件来启动和关闭。

不幸的是,我还没有为此创建完整的教程。当我这样做时,将发布here。我怎么在我的Component Explorer项目中做了这个机制的运行示例。您可以在github上找到它的源代码。并在here处举例说明。

我一直活跃在这个网站上,所以如果你选择在你的项目中实现它,我可以帮助你解决你将遇到的任何问题。

干杯,祝你好运。

答案 1 :(得分:0)

关于你的按钮类,我假设你想要一个可以用鼠标点击的按钮。如果是这种情况,您应该将Event.TRIGGERED更改为MouseEvent.CLICK,将onTrigger中的e:Event参数更改为e:MouseEvent。然后,只要单击按钮,该功能就会触发。