我现在使用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
}
}
}
您对此架构有任何建议吗?非常感谢您的所有反馈。
答案 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。然后,只要单击按钮,该功能就会触发。