- 浏览: 1005453 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (675)
- ios (214)
- android-course (5)
- unity3d (7)
- cocos2d (36)
- html5 (3)
- game (5)
- android (42)
- java (57)
- php (12)
- 创业 (10)
- SEO (3)
- 架构 (2)
- 数据库 (3)
- 产品设计 (9)
- 操作系统 (10)
- Web前端 (11)
- 其他 (50)
- GAE (1)
- mac os (8)
- Open Source (2)
- 序列号 (10)
- C (2)
- database (2)
- 算法 (6)
- 设计模式 (1)
- photoshop (1)
- 3dmax (1)
- maya (1)
- opengl (3)
- 游戏设计 (1)
- 趋势 (1)
- cocos2d-x (4)
- shell (3)
- c++ (30)
- lua (5)
- flash (1)
- spring (3)
- mysql (4)
- Git (6)
- xmpp (1)
- cocos2dx (14)
- mac (2)
- 编程规范 (2)
- windows (1)
- linux (5)
- coocs2dx (1)
- ubuntu (2)
- aws (1)
- OPENGLES (1)
- 原画 (1)
最新评论
-
jlees:
Best mobile app testing tool pc ...
iOS + XCode 4 + GHUnit = Mobile TDD+Continuous testing -
ipanda:
楼主,能否给一个Micro CloudFoundry的虚机或者 ...
Cloud Foundry使用及开发向导 -
love_zongming:
谢谢分享。。
visio2007序列号 -
雨花台舞水:
你这才是枪文把
套在 360 黑匣子外面的黑盒子:你被技术型枪稿吓到了么? -
hugh.wang:
改天试试
Mac版魔兽争霸3 1.24e下载
今天我们讨论的主题是Model-View-Controller (MVC)设计模式,以及如何在cocos2d里面实现它。来自波兰的Bartek Wilczyński写了一系列的文章来介绍这个模式,同时说明了为什么要使用mvc,以及如何在cocos2d里面使用mvc。
这个波兰人写的文章已经被我全部翻译过来了,请点击传送门查看。
当我在读他写的这些文章的时候,我记得Jeremy Flores在github上面有一个cocos2d里面实现mvc的版本库。他把它取名为Cocos2D-MNC,全名是Model-Node-Controller。并且代码是开源的,MIT许可。
这个MVC模式和游戏实体组件系统差不多,我在这篇文章里面就有介绍过了。对于这两个系统来说,它的思想都是统一的,那就是不要继承CCSprite并把游戏logic全部塞到sprite里面去。CCSprite应该只负责渲染显示。而且有时候,你可能需要创建很多sprite,我们最好是创建一个CCNode类,然后里面聚合许多sprites。这样CCNode成为了Controller,控制view。当view(比如sprite,effect,gL drawings等等)在屏幕上面移动的时候,controller结点会轮询所有它包含的结点来查询一些游戏相关的状态信息,并且做一些游戏逻辑,然后反过来再更新view。
对于小游戏来说,mvc模式确实可以运行地很好。它比起直接继承CCSprite,并把一大堆处理逻辑放到CCSprite里面要强多了。如果你发现,你还是不停地继承ccsprite,然后把一大堆处理逻辑塞到一个ccsprite的子类里面,那么你就应该考虑一下mvc设计模式了。
当我们在cocos2d论坛里面提到“是否继承CCSprite还是使用一些model类来构建你的游戏对象结构?”这样的问题的时候,我还是要再强调一点,多用组合,少用继承!如果一味地使用继承,那么当游戏世界里面的对象种类变多,功能变复杂以后,会导致整个继承树“头重脚轻”,严重破坏了良好的面向对象设计原则---我们设计的类层次结构应该是扁平结构的,而不是一个头很大的树。
那么,我们需要使用怎样的架构来处理游戏里面的对象呢?答案就是使用组合。现在已经有一些非常好的引擎,比如TorqueX、PushButton Engine、Unity3D等,它们都是基于组合的实体组件系统。
你可以从PushButton的文档里面得到有关实体组件系统的介绍。同时,可以读一读《Components in TorqueX and what the differences are to XNA Game Components》这篇文章来加深对实体组件系统的理解。
你还可以从维基百科上获得更多的信息。实际上,objc语言本身就是被设计为一种可重用的软件组件。
Scott Bilas在2002的GDC大会上提出了一种基于数据驱动的游戏对象系统,同时Dungeon Siege使用了这个新理念,它指出了为什么继承对于游戏开发者来说非常不好,还说明了基于对象组合的组件系统的优点。事实上,在2002年,我开始与SpellForce一起工作的时候,我们已经有一个组件系统了,我们把它叫做Aspects、Abilities和Spells。它可以帮助我们把所有的游戏数据都存储到数据库里面,程序员只需要写一些泛型代码来统一处理这些数据就行了。
在2009年的GDC大会上面,Radical Entertainment’s Marcin Chady也做了一个类似的ppt,大家可以点此查看。
Mick West还写了一篇文章,《重构游戏实体为游戏组件》,在这篇文章里面,它很好地描述了,为什么要更改以前的继承模型,转而投向组件系统的怀抱。
还有一些更高级的读物,比如一些paper《Dynamic Game Object Component System for Mutable Behavior Characters》 ,它基于finite state machines讨论了组件系统,而且引入了基于规则的NPC行为系统。
在Game Architect 博客里面把它称之为Anatomy of Despair,并且指出了基于继承的类设计的一些缺点,同时展示了使用组合如何来解决这些问题。
后记:《如何在cocos2d里面实现mvc》这一系统的文章到此就全部结束了,非常感谢大家的耐心阅读。mvc在cocoa开发中被广泛使用,几乎没有哪一个ios开发者不知道mvc。但是,mvc不是银弹,没有银弹!我个人觉得基于组件的实体系统和fsm更适合现在游戏架构。由于本人水平和经验有限,故只能翻译这么多。这篇博文提到了其它许多没有翻译过的文章,建议大家都读一读。我也不打算翻译了。有兴趣的同学可以翻译出来,为开发者社区贡献一点力量。
全剧终!
参考文献:
Game Programming Patterns / Behaving Patterns / Component
How to implement MVC pattern in cocos2d game | XPerienced Blog
T=Machine » Entity System 1: Java/Android
T=Machine » Entity Systems are the future of MMOG development – Part 1
How to implement MVC pattern in cocos2d game–part 2 | XPerienced Blog
Games from Within| Indie iPhone game development
Game development |Mobile development |PODD
Cowboy Programming » Evolve Your Hierarchy
Object-Oriented Game Design| GBGames - Thoughts on Indie Game Development
Why Use MVC for Games? A Q&A Session | DeadPanic
C Coroutines for Game Entity State Management | Will's Blog
10 Reasons the Age of Finite State Machines is Over — AiGameDev.com
Subclass CCSprite vs Model Class. Best Practice? « cocos2d for iPhone
Animating a CCSprite using MVC design « cocos2d for iPhone
Animating a CCSprite using MVC design « cocos2d for iPhone
Subclassing CCNode and using CCSpriteBatchNode properly « cocos2d for iPhone
Component based entity systems « cocos2d for iPhone
How do you organize your code? « cocos2d for iPhone
Game Object Structure: Inheritance vs. Aggregation
Game Architecture Best Patterns and Practices - App Hub Forums
How to write solid Pure Aggregation (composition) Game Objects in Java? - Stack Overflow
Prefer Composition over Inheritance | Learn & Master Cocos2D Game Development
Components, Draw Calls and performance…. « Big Bad Robots Indie Game Studio
To Components with Cocos2D with love… « Big Bad Robots Indie Game Studio
Entity System FrameworkT=Machine » Entity System 1: Objective-C
architecture - Component based game engine design - Stack Overflow
Component Based Entity System Design Part 1 | Purple Pwny Games
Component-based game object systems in practice - Game Development - Stack Exchange
What is (functional) reactive programming? - Stack Overflow
Why I switched from component-based game engine architecture to functional reactive programming – Lambdor Devblog by Gerold MeisingerQuickstarting game development in Haskell and Ubuntu – Lambdor Devblog by Gerold Meisinger
Game Coding Complete - Component System Example Code (from GPG6)
objective c - Obj-C component-based game architecture and message forwarding - Stack Overflow
mikeash.com: Friday Q&A 2009-03-27: Objective-C Message Forwarding
Articles - Component Based Objects
Unseen-Academy - Component System
Componentbased entity systems - Game Development Lab Wiki
divotkey/cogaen3-java - GitHub
Open source component-based game or engines? - Game Development - Stack Exchange
Component Based Entity System Design Part 2 | Purple Pwny Games
一个基于组件的动态对象系统 - 游戏创意和设计 - TechWeb-游戏社区
游戏对象的实现 (补)_thunder54007-ChinaUnix博客
thelinuxlich/artemis_CSharp - GitHub
thelinuxlich/starwarrior_CSharp - GitHub
Recommended Eclipse plugins to generate UML from Java code - Stack Overflow
Game Object Structure: Inheritance vs. Aggregation
Linkvent Calendar, Day 3: MVC with Cocos2D | Learn & Master Cocos2D Game Development
Artemis Entity Framework Ported to C# | Ploobs
C++ Port of Artemis Entity Component System Framework (In Progress) - GameDev.net
发表评论
-
Mac上安装Protocol Buffers
2016-09-18 11:29 7721.下载文件 (http://code.google.com ... -
webview点击获取图片
2016-04-01 17:12 783UILongPressGestureRecognizer * ... -
hexo 自动部署脚步
2016-03-29 21:17 887echo "===============star ... -
自定义navigationItem.leftBarButtonItem后,系统默认的手势滑动失效解决方案
2016-03-01 18:01 1243自定义navigationItem.le ... -
UITextView autolayout 高度自适应
2016-02-15 23:26 1358UITextView *t = [[UITextView ... -
腾讯敏捷框架TAPD》研究
2015-11-19 20:47 1383这篇文档是研究心得 ... -
ios image 压缩
2015-11-06 12:09 794- (UIImage *)_scaleToSize:(UII ... -
iphone分辨率图解
2015-11-04 17:33 494iphone分辨率图解 -
IOS中获取各种文件的目录路径的方法
2015-09-24 12:10 612iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储 ... -
Customizing Navigation Bar and Status Bar in iOS 7
2015-08-17 20:23 1556Like many of you, I have been ... -
GCD 深入理解:第一部分
2015-07-24 14:49 722本文翻译自 http://www.raywenderlich ... -
Mac上的抓包工具Charles
2015-05-06 01:09 5278Mac上的抓包工具Charles 分类: IO ... -
如何移除发布版本中的NSLog输出
2015-05-04 20:27 699Phone开发中会经常使用NSLog将一些运行信息输出到终端 ... -
xcode4的环境变量,Build Settings参数,workspace及联编设置
2015-03-27 11:23 879一、xcode4中的环境变量 $(BUILT_PROD ... -
数字签名是什么?
2014-11-25 16:58 583http://www.ruanyifeng.com/blog/ ... -
让你的Xcode更加高效
2014-10-29 00:16 469http://www.tairan.com/archives/ ... -
我所经历的“余额宝”的那些故事
2014-06-08 01:05 709“余额宝”经过不到 ... -
代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
2014-05-31 01:25 753最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍 ... -
WWDC 2013 Session笔记 - iOS7中的多任务
2014-05-31 01:24 618这是我的WWDC2013系列笔记中的一篇,完整的笔记列表 ... -
Protect your game assets (currently Cocos2D only)
2014-05-20 15:54 885Creating a game is hard work ...
相关推荐
《cocos2d-x如何实现MVC》系列中的完整实例
coocs2d核心编程代码。。。lua。。游戏开发,包含各种核心编程第二版demo
这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致...注意,这个PureMVC中的 class(ClassName, BaseName) 函数并不提供,因为此框架本意就是为了用于cocos2d-x-lua中。
基于Cocos2d-x框架,并使用MVC架构的一个棋类游戏。 Pure MVC架构,构建可维护的Cocos2d-x游戏。 ###使用的框架 Cocos2d-x2.2.3 ###apk下载地址 应用宝 360手机助手 ###相关博客 架构篇:...
cocos2d-js-mvc cocos2d-js-mvc df
MVVM源于MVC(Model-View-Controller)模式,期间还演化出MVP(Model-View-Presenter)模式。MVVM的出现促进了GUI前端开发和后端开发逻辑的分离,提高了前端开发效率。 MVVM的核心是数据驱动即ViewModel,ViewModel是...
基于Cocos2d-x框架,并使用MVC架构的一个棋类游戏。 Pure MVC架构,构建可维护的Cocos2d-x游戏。 ###使用的框架 Cocos2d-x2.2.3 ###apk下载地址 ###相关博客 架构篇: ###项目导入 将该项目放在Cocos2d-x根目录下的...
FairyGUI-cocoscreator A flexible UI framework for Cocos Creator, working with the FREE professional Game UI Editor: FairyGUI Editor. Official website: 关于版本 master 适用于CocosCreator 2.4或更新的...
PureMVC框架用于基于cocos2d-x引擎基础游戏构架
这个扩展是一个轻量级的 MVC 框架,是为了开发移动游戏,结合使用 cocos2d-x 框架而开发一个轻量级的框架。 什么是 MVCS? - M 就是 Model 层,存储数据的地方,只提供2种接口,gets 和 sets 接口。 - V 就是 View ...
保卫萝卜源码,MVC框架,易于学习,带资源,模型素材 源码描述: C#保卫萝卜示例源码 点击按钮会加载游戏窗体界面,源码只是一个示例,实现了三个关卡,关卡选择,场景跳转,boss的产生,炮塔的克隆等一系列功能 ...
About CocoStudio is a game development tool kit based on Cocos2d-x. It breaks down tasks in game development into different roles, it includes: UI editor for UI graphic artists, Animation editor for ...
Kode 是为了结合使用 cocos2d-x 框架开发移动游戏而开发一个轻量级 MVC 框架。Kode 已经应用在一款大型的横版格斗手游,实用性和稳定性都可以保证,同时 Kode 也会持续地更新,随着项目开发 Kode 已更新到 v3 了,v3...
mvc 鼠标控制 人物八个方向移动 提供源代码
Kode 是为了结合使用 cocos2d-x 框架开发移动游戏而开发一个轻量级 MVC 框架。Kode 已经应用在一款大型的横版格斗手游,实用性和稳定性都可以保证,同时 Kode 也会持续地更新,随着项目开发 Kode 已更新到 v3 了,v3...
一个2D闯关游戏,完全原创,包括自己多年编程经验写的框架(这个框架是基于mvc的,简单MVC模式和传统mvc模式混合,既保证开发效率又兼顾游戏核心的灵活稳定),还有简易物理引擎。
Not that Cocos-2D is not great, but the fact it's using SpriteKit means that it does not have any dependencies. * It does not have any images. That's right. The entire UI is done either via UIKit, or...