我现在使用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
}
}
}你对这个架构有什么建议吗?非常感谢您的所有反馈。
发布于 2014-03-27 16:34:08
我用gazman-sdk.com为屏幕创建了一个很好的解决方案。
当你考虑屏幕机制时,它的主要任务是什么:
on resume on pause <>H112,并在创建屏幕时调用<代码>D13,当屏幕为destroyed.
时调用<代码>D14
opneScreen(new GameScreen());这样的代码行。因为调用此方法的类知道GameScreen是谁,您希望避免这一点。我使用Multiton pattern构建了一个解决方案,它具有屏幕堆栈模型的多种表示形式,既可用于弹出窗口,也可用于屏幕。每个屏幕都被封装,并通过侦听系统事件来启动和关闭。
不幸的是,我还没有为此创建一个完整的教程。当我这样做的时候,它将被发布为here。我是如何在我的组件浏览器项目中运行这个机制的例子的。你可以在github上找到它的源代码。和here的现场例子。
我经常活跃在这个网站上,所以如果你选择在你的项目中实施它,我能够帮助你在途中有任何问题。
干杯,祝你好运。
发布于 2013-10-11 12:00:21
关于您的button类,我假设您想要一个可以用鼠标单击的按钮。如果是这种情况,您应该将Event.TRIGGERED更改为MouseEvent.CLICK,并将onTrigger中的e:Event参数更改为e:MouseEvent。然后,每当您单击该按钮时,该函数都会触发。
https://stackoverflow.com/questions/19297333
复制相似问题