在游戏开发中,对于一般网络游戏,由于需要多人协同开发,每个人负责不同的模块开发,为了减少耦合,需要用来一些MVC框架,减少模块之间的耦合。我们现在使用的mvc框架是pureMVC。pureMVC的官网:http://www.puremvc.org

 
pureMVC是一个轻型的、基于观察者模式设计的MVC框架。
我们首先从Git上面把pureMVC下载下来,可以看到如下目录: 
 

pureMVC是开源框架,在src目录下,我们可以看到这款框架的源代码。
下面,简单说一下这个mvc框架:
 

pureMVC框架的目标很明确,即把程序分为低耦合的三层:Model、View和Controller。

在PureMVC实现的经典MVC设计模式中,这三部分由三个单例模式类管理,分别是Model、View和Controller,三者合称为核心层或核心角色。
PureMVC中还有另外一个单例模式类-Facade,Facade提供了与核心层(即Model,View和Controller)通信的唯一接口,以简化开发复杂度。

 

Model与Proxy
Model保存了对Proxy对象的引用,Proxy负责操作数据模型,与服务器端进行通信存取数据

 

View与Mediator
View保存了对Mediator对象的引用。由Mediator对象来操作具体的视图组件(View Component),包括:添加事件监听器,发送或接收Notification,直接改变视图组件(View Component)的状态。

这样做实现了把视图和控制它的逻辑分离开来。
 

Controller与Command
Controller保存所有Command的映射。Command类是无状态的,只在需要时才被创建。

 

Facede与Core
Facade类应用单例模式,它负责初始化核心层(Model\View\Controller),并能访问他们的Public方法。

 

在实际的应用中,你只需要继承Facade类创建一个具体的Facade类就可以实现整个MVC模式,并不需要在代码中导入编写Model\View\Controller类。

 

Proxy\Mediator\Command就可以通过创建的Facade类来相互访问通信。

 

Notification可以被用来触发Command的执行
Facade保存了Command与Notification之间的映射。当Notification被发出时,对应的Command就会自动地由Controller执行。

 

Mediator发送、声明、接收Notification
当用View注册Mediator时,Mediator的listNotifications方法会被调用,以数组形式返回该Mediator对象所关心的所有Notification之后,当系统其它角色发出同名的Notification时,关心这个Notification的Mediator都会调用handleNotification方法将Notification以参数传递到方法。

 

Proxy发送,但不接收Notification
在很多场合下,Proxy需要发送Notification,比如:Proxy从远程服务器接收到数据时,发送Notification告诉系统;或当Proxy的数据被更新时,发送Notification告诉系统。

 

Facade
MVC设计模式的核心元素在PureMVC中体现为Model类、View类和Controller类。为了简化程序开发,PureMVC应用了Facade模式。
Facade是Model\View\Controller三者的"经纪人"。实际编写代码时你并不用导入这三者的类文件,也不用直接使用它们。Facade类已经在构造方法中包含了对核心MVC三者单例的构造。

一般地,实际的应用程序都有一个Facade子类,这个Facade类对象负责初始化Controller,建立Command与Notification之间的映射,并执行一个Command注册所有的Model和View。
 

Command
Command对象是无状态的;只有在需要的时候(Controller收到相应的Notification)才会被创建,并且被执行(调用execute方法)之后就会不给删除。
SimpleCommand只有一个execute方法,execute方法接收一个nofitication实例作为参数,实际应用中,你只需要重写这个方法就行。
MacroCommand让你可以顺序执行多个Command,每个执行都会创建一个Command对象并传参一个队源Notification的引用。

MacroCommand在构造方法调用自身的initalizeMacroCommand方法,实际应用中,你需重写这个方法,调用addSubCommand添加子Command.你可以任意组合SimpleCommand和MacroCommand成为一个新的Command
 

上面只是关于PureMVC的一些综述性知识点。如果想深入学习可以仔细研读官方的《pureMVC最佳实践》:http://puremvc.org/component/option,com_wrapper/Itemid,183/
 
其中关于pureMVC设计模式的讨论也有几篇博客值得研读:
4、PureMVC(AS3)剖析:设计模式(一):http://www.cnblogs.com/skynet/archive/2013/03/14/2958644.html 
5、PureMVC(AS3)剖析:设计模式(二):http://www.cnblogs.com/skynet/archive/2013/03/25/2980662.html 
  
 

基于HTML5的SLG游戏开发( 三):认识PureMVC的更多相关文章

  1. 基于HTML5的SLG游戏开发(序)

          2012年前后,HTML5游戏凭借跨平台.易移植.部署简单.节省成本等优点被炒的火热,经过一两年的快速发展,市场出现了一些成功地HTML5游戏产品,像磊友的<修仙三国>,神奇时 ...

  2. 基于HTML5的SLG游戏开发(一):搭建开发环境(2)

          游戏开发过程中经常需要处理各种事件,而HTML5游戏开发中,所有的场景和UI面板都是绘制在Canvas上面,假设需要对某一UI面板上的关闭按钮添加事件监听,采取的方法是对关闭按钮图片资源进 ...

  3. 基于HTML5的SLG游戏开发( 二):创建HTML5页面

    HTML5游戏的开发过程中是在浏览器上进行运行调试的,所以首先我们需要建立一个html页面. 其中,我们把所有的canvas都放到一个viewporter(视图)里面,因此,在body中放置了一个id ...

  4. 基于HTML5的SLG游戏开发(一):搭建开发环境(1)

    开发环境: 1.操作系统:MacOS 10.8.5 2.本地web服务器:Apache 2.2.24 (Window环境推荐使用WampServer) 3.编码工具:WebStrom 7.0 4.调试 ...

  5. 转: Orz是一个基于Ogre思想的游戏开发架构

    Orz是一个基于Ogre思想的游戏开发架构,好的结构可以带来更多的功能.Orz和其他的商业以及非商业游戏开发架构不同.Orz更专著于开发者的感受,简化开发者工作.Orz可以用于集成其他Ogre3D之外 ...

  6. HTML5 2D平台游戏开发#4状态机

    在实现了<HTML5 2D平台游戏开发——角色动作篇之冲刺>之后,我发现随着角色动作的增加,代码中的逻辑判断越来越多,铺天盖地的if() else()语句实在让我捉襟见肘: 这还仅仅是角色 ...

  7. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  8. 1、Cocos2dx 3.0游戏开发三找一小块前言

    尊重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27094663 前言 Cocos2d-x 是一个通用 ...

  9. HTML5 2D平台游戏开发#6地图绘制

    此前已经完成了一部分角色的动作,现在还缺少可以交互的地图让游戏看起来能玩.不过在开始之前应当考虑清楚使用什么类型的地图,就2D平台游戏来说,一般有两种类型的地图,Tile-based和Art-base ...

随机推荐

  1. 自己写的一个android小应用 手电筒

    简洁 小巧 免费 无广告 代码奉上 active类 private boolean isopent = false; private Camera camera; @Override protecte ...

  2. 使用IRP进行文件操作

    使用IRP进行文件操作 首先声明这个是菜鸟—我的学习日记,不是什么高深文章,高手们慎看. 一定要先感谢为技术的进步而付出辛勤汗水的人,感谢他们对技术的共享. 一个通用IRP访问文件的十六进制编辑器(开 ...

  3. ruby字符串相关方法

    构造字符串字面量 方法一:最简单的使用单引号或者双引号括起来的字符串,比如"hello". 方法二:使用%q配合分界符,%q代表单引号str=%q!he/lo! 方法三:使用%Q配 ...

  4. 【HDOJ】1031 Design T-Shirt

    qsort直接排序. #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXN ...

  5. 20140708郑州培训第二题Impossible Game

    Impossible Game题目描述你发明了一个简单的单人电脑游戏.在开始游戏时,玩家必须输入一个长度为 K 的字符串,且这个字符串的元素只能为‘A’‘B’‘C’或者‘D’.每一种字符串都代表一种颜 ...

  6. (转载)常用JS加密编码算法 五:SHA1算法

    (转载)http://neil-yang.iteye.com/blog/703470 /* * A JavaScript implementation of the Secure Hash Algor ...

  7. 如何当好党支部书记 z

    如何当好党支部书记 党支部书记是党支部一班人的“班长”,一个党支部是否具有坚强的战斗力,能否发挥好战斗堡垒作用,在很大程度上取决于是不是有一个得力的支部书记.在改 革开放,全面建设小康社会,构建社会主 ...

  8. HDOJ -- 1015

    1.DFS #include<cmath> #include<cstdio> #include<cstdlib> #include<string> #i ...

  9. Qt学习之路(1)------Qt常用类用法说明

    Qt常用类 向控制台输出文本 第一个例子,我们采用STL的方式: console.cpp #include <iostream> int main() { std::cout <&l ...

  10. (转载)TRS内容管理平台用户注册逻辑漏洞

    首先 site:gov.cn inurl:WCM TRS 的内容管理系统是国内政府网站使用最多的系统之一 如上面所说:外交部 http://wcm.fmprc.gov.cn/wcm/ 网址加上:wcm ...