游戏由若干个场景构成,每个场景包含若干个层(Layer),这些层就是MVC模型的View部分,每个Layer都可以有一个Controller和Model与之对应,完成相应的功能。
graph LR
SceneA-->LayerA1
SceneA-->LayerA2
SceneA-->LayerA3
LayerA1-->ControllerA1
ModelA1-->ControllerA1
LayerA2-->ControllerA2
ModelA2-->ControllerA2
LayerA3-->ControllerA3
ModelA3-->ControllerA3
SceneB-->LayerB1
SceneB-->LayerB2
LayerB1-->ControllerB1
ModelB1-->ControllerB1
LayerB2-->ControllerB2
ModelB2-->ControllerB2
使用SceneMgr.load(sceneClassName)来控制场景的切换,当然何时切换场景,以及切换到哪个场景一般都是由场景内的某个Controller来控制的。
2.1 Controller向View通信
每个Controller都会保存对应View的实例,因此Controller是可以很方便地调用View类中的方法。
2.2 View向Controller通信
View向Controller通信则是通过事件派发实现的。在Controller中对View添加可能的事件监听,然后在View中执行某些交互操作时,派发相应的事件。这样Controller就能处理View上的操作了。
这里的全局一般指的是服务器传来某些消息,需要通过某些Controller来更新View。对此,zero使用了观察者模式来实现这个功能。
有一个名为NotificationCenter的被观察者类,这个类负责发出服务器传来的消息通知,注册到NotificationCenter上,并且订阅了通知的观测者类(也是Controller)就会得到通知,并进行处理。
某个Controller A如果想向Controller B通信,则需要通过NotificationCenter获取到这个Controller B,然后调用B.handleNotification()方法来通知B处理某个消息。
APK: https://github.com/Neo12138/zero/tree/master/proj.app/app-release-unaligned.apk
游戏大厅界面
游戏内

