Skip to content

vinson12138/zero

Repository files navigation

一、zero框架的大致结构

游戏由若干个场景构成,每个场景包含若干个层(Layer),这些层就是MVC模型的View部分,每个Layer都可以有一个ControllerModel与之对应,完成相应的功能。

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来控制的。

三、ViewController如何通信?

2.1 ControllerView通信

每个Controller都会保存对应View的实例,因此Controller是可以很方便地调用View类中的方法。

2.2 ViewController通信

ViewController通信则是通过事件派发实现的。在Controller中对View添加可能的事件监听,然后在View中执行某些交互操作时,派发相应的事件。这样Controller就能处理View上的操作了。

四、全局与Controller如何通信?

这里的全局一般指的是服务器传来某些消息,需要通过某些Controller来更新View。对此,zero使用了观察者模式来实现这个功能。

有一个名为NotificationCenter的被观察者类,这个类负责发出服务器传来的消息通知,注册到NotificationCenter上,并且订阅了通知的观测者类(也是Controller)就会得到通知,并进行处理。

五、ControllerController如何通信?

某个Controller A如果想向Controller B通信,则需要通过NotificationCenter获取到这个Controller B,然后调用B.handleNotification()方法来通知B处理某个消息。

示例Demo

APK: https://github.com/Neo12138/zero/tree/master/proj.app/app-release-unaligned.apk

游戏大厅界面

image

游戏内

image

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published