2013-10-10 156 views
0

我现在使用starling框架在flash中做游戏。不过,我对游戏中的体系结构不熟悉,我认为我在游戏中所做的并不是很好。AS3游戏架构

我有一个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 
     } 
    } 
} 

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

+0

记得在你的函数参数中包含你期待的类型。 例如: 公共功能控制器(按钮:按钮){... 关于体系结构它真的取决于你想要做什么 – andygoestohollywood

+0

我想要做的是创建一个控制器的列表,将控制屏幕上的每个组件(如按钮,英雄等等等等)。所有将在Controller类中。 Controller类将像发布者一样,只要发生事件,它就会将事件发布到需要事件的每个组件控制器 – themyth92

回答

0

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

+0

因为我使用starling框架,所以没有MouseEvent,所以我使用触发器事件。谢谢你的回答,但我想问的是这些类的结构,就像当我按下按钮时,事件将传递给控制器​​,控制器将传递给所有监听事件的组件控制器。然后这些控制器将更新组件的皮肤,文本等... – themyth92

1

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

当你想想看屏幕的机制是什么它的主要任务是:

  • 管理一个屏幕叠加
  • 告知与栈变化的屏幕:
    • 呼叫on resume当屏幕越来越来的顶部堆栈
    • 打电话on pause屏幕不再位于堆栈顶部
    • 并致电屏幕创建时为,当屏幕被破坏时为dispose
  • 此外,你想封装在屏幕内部的屏幕逻辑一些如何。所以你的代码不会有这样的行:opneScreen(new GameScreen());。因为调用这个方法的班级知道谁是谁,你想避免这种情况。
  • 最后,当您的屏幕机制启动并运行时,您不想为弹出窗口编写另一个相同的机制,因为它几乎相同。

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

不幸的是,我还没有创建完整的教程。当我这样做,它将被公布here。我在Component Explorer项目中做过这种机制的运行示例。您可以在github上找到它的源代码。现场示例here

我一直活跃在本网站,所以如果您选择在您的项目中实施它,我可以帮助您解决任何问题。

干杯和祝你好运。