PureMVC使用与源码分析

思考并回答以下问题:

客户端框架

关于Unity的架构有如下几种常用的方式。

**1.EmptyGO(空对象逻辑管理)**

在Hierarchy上创建一个空的GameObject,然后挂上所有与GameObject无关的逻辑控制的脚本。使用GameObject.Find()访问对象数据。

缺点:逻辑代码散落在各处,不适合大型项目。

**2.Simple GameManager(单例游戏管理)** 所有与GameObject无关的逻辑都放在一个单例中。 缺点:单一文件过于庞大。 **3.Manager of Managers(“管理器”的管理)**

将不同的功能单独管理。如下:

  • MainManager:作为入口管理器。
  • EventManager:事件(消息)管理器。
  • UIManager:UI管理器。
  • AudioManager:音频管理器。
  • MenuManager:菜单管理器。
  • PoolManager:对象缓冲池管理器(减少动态开辟内存消耗,减少GC)。
  • GameManager:游戏管理。
  • LevelManager:关卡管理器。
  • SaveManager:存储与调用配置管理器。

实现一个简单的PoolManager

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 存储可动用的GameObject
// dormant 休眠的;蛰伏的;暂停活动的;
private List<GameObject> dormantObjects = new List<GameObject>();

// 在dormantObjects获取与go类型相同的GameObject,如果没有则new一个。
public GameObject Spawn(GameObject go)
{
GameObject temp = null;

if (dormantObjects.Count > 0)
{
foreach (GameObject dob in dormantObjects)
{
if (dob.name == go.name)
{
// Find an available GameObject
temp = dob;
dormantObjects.Remove(temp);
return temp;
}
}
}
// Now Instantiate a new GameObject.
temp = GameObject.Instantialte(go) as GameObject;
temp.name = go.name;
return temp;
}

// 将用完的GameObject放入dormantObjects中
public void Despawn(GameObject go)
{
go.transform.parent = PoolManager.transform;
go.SetActive(false);
dormantObject.Add(go);
Trim();
}

// FIFO 如果dormantObjects大于最大个数则将之前的GameObject都推出来。
public void Trim()
{
while (dormantObjects.Count > Capacity)
{
GameObject dob = dormantObjects[0];
dormantObjects.RemoveAt(0);
Destroy(dob);
}
}

缺点:

  • 不能管理prefabs。
  • 没有进行分类。

更好的实现方式是将一个PoolManager分成:

  • 若干个SpawnPool。
  • 每个SpawnPool分成PrefabPool和PoolManager。
  • PrefabPool负责Prefab的加载和卸载。
  • PoolManager与之前的PoolMananger功能一样,负责GameObject的Spawn、Despawn和Trim。

要注意的是:

  • 每个SpawnPool是EmptyGO。
  • 每个PoolManager管理两个List(Active,Deactive)。

有一个NB的插件叫Pool Manager。

LevelManager:关卡管理。
推荐插件:MadLevelManager。

SaveManager:配置管理。

实现Resume,功能玩到一半数据临时存储。
推荐SaveManager插件。可以Load、Save均采用二进制(快!!!)
所有C#类型都可以做Serialize。
数据混淆,截屏操作。

**4.将View和Model之间增加一个媒介层。**

MVC(MVCS):较知名开源框架:PureMVC、StrangeIOC

MVVM:uFrame 图形化操作框架

StrangeIOC

StrangeIOC是一个开源的免费项目。最基本的思想就是“Binding”(绑定)。

基本架构:

1
IBinder.Bind<Key>().To<Value>();

由这个Key去触发这个Value。

StrangeIoC是依据控制反转和解耦原理设计的,支持依赖注入。

控制反转即IoC(Inversion of Control):把传统上由程序代码操控的对象的调用权交给容器管理。

总结使用“框架”总体的优势

  • 1:项目耦合性低,复用性高。
  • 2:相对于复杂多变的需求变化、一般业务逻辑编写都相对固定(位置固定、方式固定),减轻了复杂项目对程序员“功力”的要求,特别适合中大型项目以及需求变更频繁的情况。
0%