读书人

cocos2d里面怎么实现MVC(一)

发布时间: 2012-07-25 09:43:06 作者: rapoo

cocos2d里面如何实现MVC(一)


cocos2d里面怎么实现MVC(一)
?前言:

? ? 众所周知,现在MVC非常流行。现在只要随便搜索一下,哪里都是MVC的影子。刚开始在j2ee里面,然后是rails,后面居然.net也出来了,ios更不用说,哪里都是mvc,而且强制你必须使用mvc。但是,我们写的那些程序,真正完全符合mvc吗?呵呵,这个不好说,看个人理解程度而异。mvc实在是太火了,马上就有人在cocos2d社区里面讨论,cocos2d该怎么实现mvc呢?大家你一言,我一语,讨论的是热火朝天。有人支持,也有人反对。不管咋样,今天让我们也来见识一下cocos2d里面的mvc,看看到底这玩意儿好使不。

?

? ??Model-View-Controller (MVC)?在web应用开发中非常流行,它是一种组合设计模式,目前被广泛应用于带有图形交互用户界面程序开发中。一些web开发框架,比如Ruby On Rails,Django?和?ASP.NET MVC,?它们是不同语言平台上面的web开发框架,但是,它们都共用同样的原则--那就是把用户表示层和逻辑层分离开来。关注点分离(SoC),这个原则在现代软件工程方法中是一个非常重要的设计理念--不要迷失于实现细节,遇到一个实际问题的时候,要划分不同的关注点,且这些关注点必须隔离开来,这样才能达到更好的代码重用度,以获得鲁棒性、可适配性和可维护性。所有这些软件属性对于软件质量来说都是至关重要的。

? ??Cocos2d本身并不是基于mvc的理念来设计的,但是,这并不防碍你在自己的游戏开发中使用mvc。实现方式肯定是多种多样的,在这篇博文中, 我只是向大家分享一下我是怎么在cocos2d里面实现mvc的,同时,在最后,我会写一个简单的游戏demo,当然,里面使用的是cocos2d+mvc。

?

现有问题

? ? cocos2d里面有这样一些类,CCSprite,CCLayer,CCScene,所有这些,都是CCNode的子类。基本上,大家在使用cocos2d开发游戏的时候,都会采用下面的步骤来实现游戏逻辑:

  1. 通过应用程序代理类来初始化第一个CCScene(即AppDelegate里面的第一个CCScene),
  2. CCScene里面实例化一个或者多个CCLayer,并把它们当作孩子添加进去。
  3. CCLayer 里面实例化一个或者多个CCSprite,也调用addChild添加进去
  4. CCScene 处理用户输入(比如touch事件和加速计的改变),同时更新CCLayer和CCSpirte的属性,比如更改CCSprite的position,让sprite运行一个或多个actioin等。
  5. CCScene里在运行一个游戏循环(game loop,一般是1/60更新一次),然后CCLayer和CCSprite就在这个game loop里面做一些更新和游戏逻辑。

? ? 这个过程看起来非常简单,而且也可以很快地做出游戏来。这也是为什么cocos2d这么流行的原因,它实在是太简单了。但是,当你的游戏逻辑越来越复杂的时候,你的代码会变得越来越难以维护。这里面最突出的问题就是,CCScene这个类负责的事情太多了---同时要处理用户交互,还有负责游戏逻辑(逻辑层)和画面显示(表示层)。(译者:根据SoC的原则,这显然是不合理的,我们应该把职责分离开来,这样代码才更容易维护。同时SRP(单一职责原则)也是这么要求的,一个类只负责一件事情)

?

模型(Model)

? ? MVC它会把一个系统划分为以下几个组件:

读书人网 >操作系统

热点推荐