0

我现在使用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
      }
   }
}

你对这个架构有什么建议吗?非常感谢您的所有反馈。

4

2 回答 2

1

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

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

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

我使用Multiton 模式构建了一个解决方案,它具有屏幕堆栈模型的多种表示形式,可用于弹出窗口和屏幕。每个屏幕都通过监听系统事件进行封装和启动和关闭。

不幸的是,我还没有为此创建完整的教程。当我这样做时,它将在这里发布。我是如何在我的组件资源管理器项目中运行此机制的示例的。你可以在github上找到它的源代码。并在此处提供示例。

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

干杯和好运。

于 2014-03-27T08:34:07.867 回答
0

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

于 2013-10-11T04:00:20.843 回答