- 浏览: 1031455 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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下载
引子:前面两篇文章介绍了一些关于在cocos2d里面如何实现mvc的理论知识,接下来的这三篇教程,我将用一个简单的教程示例,给大家演示一下具体代码实现细节。
这篇文章的写作目的就是让大家更好地理解如何在cocos2d里面实践mvc模式(当然,这里演示的不一定是标准的mvc,因为cocos2d特殊的编程方式。但是,这并不妨碍我们编写更好的代码,你们说对吧?),本文是基于前两篇文章的,所以,在继续阅读之前,我强烈建议你先读一下第一篇的理论介绍。
情景
我们将制作一个简单的面板解谜游戏(board puzzle game),当然,我们不是简单地开发一个游戏,而是要利用mvc开发出一个简单的“游戏框架”,而且这个框架将会在我的新游戏里面使用到,它具有如下一些特性:
- 一个n行n列的游戏面板(game board),n可以随着游戏难度进行变化。
- 这个游戏面板里面会包含一些“小方块(game pieces)”,而且每一个game board上都只能放一个game piece。
- 这个游戏面板可以初始化一些固定的小方块,玩家在游戏过程中,是不能移动这些小方块的。
- 这里还定义了一个“工具箱(toolbox)”,它上面可以放置许多小工具(toolbox item),它们可以看作是“可放置可移动小方块的槽子”。
- 小工具(或者叫槽子)上面可以放置许多同一类型的小工具。
- 这些小工具可以从工具箱上面移动,并且可以放置到game board 上面。
基本概念
来自 wikipedia:
model负责管理应用领域的数据和行为逻辑,同时负责响应对自己的状态数据请求(这些请求通常是从view过来的),然后响应一些指令来更改自身的状态(这些请求通常是来自controller的)。在一个事件驱动的系统中,model会通知订阅者(observers)(通常是views)它的状态改变,这样view就可以做相应的显示更新。
view则根据model的状态来合理地显示,通常是一些UI元素。一个model可以对应多个view,比如,同一数据的柱状图、饼状条、曲线图等。
controller负责接收多用户输入和调用model的一些方法。一个controller通过从用户那里获得输入,然后操作model对象,最后,model通知view来更新显示。
从维基百科的定义中,我们可以识别出以下几个主要的类(我们会在后面把model给加上去):
- GameBoardView 代表应用程序的主视图
- GameBoardController 是GameBoardView的一个控制器。
请注意,这里的实线代表一种直接的关联关系(controller里面包含一个view的引用),而虚线则代表了一种间接的关联(通过观察者模式)。这里的直接关联后面会用来实现touch事件处理。
实现
项目组织结构
在XCode4里面基于cocos2d的默认模板创建一个新的项目之后,我们又创建了下面这些Groups:
- View – views & controller 组 (我们也可以把view和controller放在那个不同的group里面,但是,由于我们两个有直接的关联关系,为了方便,我就把它们放在一些了)
- Model – 之后,我们会把model类放在这个group下面。
GameBoardView 的实现
接下来,我们开始实现GameBoardView。首先,我们把GameBoardView继承至CCNode。
@interface GameBoardView : CCNode { }
然后,实现它的init方法,然后简单地显示一串字符来验证程序的正确性。(译者:这就和我们有时候会在方法的第一句加一个CCLOG一样,只是为了验证函数是否被调用了,确保每一步都是按照你的想法去走的,这样比那种埋头编写2个小时代码不编译,而后花一晚上修改编译错误和bug要好很多。有时候只是输出还不够,还必须要做单元测试,这样才能提高效率)
- (id)init { if ((self = [super init])) { // create and initialize a Label CCLabelTTF *label = [CCLabelTTF labelWithString:@"Hello World from view" fontName:@"Marker Felt" fontSize:48]; // ask director the the window size CGSize size = [[CCDirector sharedDirector] winSize]; // position the label on the center of the screen label.position = ccp( size.width /2 , size.height/2 ); // add the label as a child to this Layer [self addChild: label]; } return self; }
GameBoardController 实现
GameBoardController负责初始化view,所以它里面包含了一个GameBoardView的引用,将来就可以非常方便地直接使用了。
@interface GameBoardController : CCNode { GameBoardView *view; }
因为我们的GameBoardController继承到CCNode,所以,我们可以把GameBoardView当作GameBoardController的孩子给添加进去。
- (id)init { if ((self = [super init])) { view = [GameBoardView node]; [self addChild:view]; } return self; }
最后的修改
我们然后修改AppDelegate类,然后运行我们新创建的contorller:
[[CCDirector sharedDirector] runWithScene: [GameBoardController node]];
好了,现在编译并运行。当程序跑起来的时候,这个结果和cocos2d自带的模板运行效果差不多。但是,有个很重要的区别,那就是我们创建了一个mvc的骨架,在接下来的游戏逻辑中,我们可以在上面做很多文章。
接下来做什么
该项目进行到现在,已经为我们引入一些更高级的概念打下了良好的基础,所以,在下一篇教程里,我们将涉及下面两个东西:
- 处理touch事件.
- 引用model的概念.
发表评论
-
Mac上安装Protocol Buffers
2016-09-18 11:29 8201.下载文件 (http://code.google.com ... -
webview点击获取图片
2016-04-01 17:12 827UILongPressGestureRecognizer * ... -
hexo 自动部署脚步
2016-03-29 21:17 932echo "===============star ... -
自定义navigationItem.leftBarButtonItem后,系统默认的手势滑动失效解决方案
2016-03-01 18:01 1280自定义navigationItem.le ... -
UITextView autolayout 高度自适应
2016-02-15 23:26 1413UITextView *t = [[UITextView ... -
腾讯敏捷框架TAPD》研究
2015-11-19 20:47 1420这篇文档是研究心得 ... -
ios image 压缩
2015-11-06 12:09 837- (UIImage *)_scaleToSize:(UII ... -
iphone分辨率图解
2015-11-04 17:33 565iphone分辨率图解 -
IOS中获取各种文件的目录路径的方法
2015-09-24 12:10 647iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储 ... -
Customizing Navigation Bar and Status Bar in iOS 7
2015-08-17 20:23 1606Like many of you, I have been ... -
GCD 深入理解:第一部分
2015-07-24 14:49 767本文翻译自 http://www.raywenderlich ... -
Mac上的抓包工具Charles
2015-05-06 01:09 5316Mac上的抓包工具Charles 分类: IO ... -
如何移除发布版本中的NSLog输出
2015-05-04 20:27 749Phone开发中会经常使用NSLog将一些运行信息输出到终端 ... -
xcode4的环境变量,Build Settings参数,workspace及联编设置
2015-03-27 11:23 925一、xcode4中的环境变量 $(BUILT_PROD ... -
数字签名是什么?
2014-11-25 16:58 616http://www.ruanyifeng.com/blog/ ... -
让你的Xcode更加高效
2014-10-29 00:16 518http://www.tairan.com/archives/ ... -
我所经历的“余额宝”的那些故事
2014-06-08 01:05 758“余额宝”经过不到 ... -
代码手写UI,xib和StoryBoard间的博弈,以及Interface Builder的一些小技巧
2014-05-31 01:25 794最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍 ... -
WWDC 2013 Session笔记 - iOS7中的多任务
2014-05-31 01:24 661这是我的WWDC2013系列笔记中的一篇,完整的笔记列表 ... -
Protect your game assets (currently Cocos2D only)
2014-05-20 15:54 926Creating a game is hard work ...
相关推荐
三、Lua脚本与Cocos2d-lua的结合 Lua脚本与Cocos2d-lua的结合使得游戏逻辑编写更加直观。Lua代码可以直接调用Cocos2d-lua的API,创建节点、设置属性、响应事件等。例如,`cc.Director:getInstance():runWithScene...
"GameBoard-《cocos2d-x如何实现MVC》系列中的完整实例"是一个关于如何在cocos2d-x中应用Model-View-Controller(MVC)设计模式的实际项目。MVC模式是一种软件架构模式,常用于构建可维护性和扩展性较高的应用程序,...
这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致...注意,这个PureMVC中的 class(ClassName, BaseName) 函数并不提供,因为此框架本意就是为了用于cocos2d-x-lua中。
在本文中,我们将深入探讨如何使用C++编程语言在cocos2d-x游戏引擎中实现一个生动逼真的“切水果”刀刃效果。cocos2d-x是一个流行的开源跨平台2D游戏开发框架,它基于C++,并支持多种操作系统,如iOS、Android和...
Cocos Creator是一款强大的2D和3D游戏开发引擎,它提供了直观的可视化编辑工具和灵活的组件系统,使得游戏开发变得更加高效。PureMVC则是一个经典的多层应用程序框架,最初设计用于ActionScript环境,但现在已经有了...
在游戏开发领域,Cocos2d-x是一款广泛使用的开源跨平台2D游戏引擎,而Cocos2d-x Lua则是其支持的脚本语言之一,它提供了便捷的lua接口来实现游戏逻辑。MVC(Model-View-Controller)是一种常见的软件设计模式,常...
游戏逻辑的实现主要依赖于Cocos2d的事件处理机制和动作系统。例如,当用户触摸屏幕时,我们可以监听Touch事件,触发忍者发射飞镖的动作。这涉及到EventDispatcher的事件监听和处理,以及Action对象的创建和执行,如...
MVC是一种软件设计模式,将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller),以实现数据、界面显示和用户交互的分离,提高代码的可维护性和可扩展性。 Cocos2d-js是Cocos2d-x的...
基于Cocos2d-x框架,并使用MVC架构的一个棋类游戏。 Pure MVC架构,构建可维护的Cocos2d-x游戏。 ###使用的框架 Cocos2d-x2.2.3 ###apk下载地址 应用宝 360手机助手 ###相关博客 架构篇:...
《cocos2dx用c++实现MoonWarriors》是一款基于Cocos2d-x游戏引擎,用C++语言编写的简单游戏。Cocos2d-x是一个跨平台的2D游戏开发框架,它允许开发者使用C++、Lua或者JavaScript来创建游戏,并能在iOS、Android、...
MVVM源于MVC(Model-View-Controller)模式,期间还演化出MVP(Model-View-Presenter)模式。MVVM的出现促进了GUI前端开发和后端开发逻辑的分离,提高了前端开发效率。 MVVM的核心是数据驱动即ViewModel,ViewModel是...
在代码实现上,cocos2d-x遵循MVC(模型-视图-控制器)设计模式,将数据、显示和逻辑分离,使得代码结构清晰,易于维护。游戏的主循环通常在Director类中,负责更新场景、渲染画面、处理输入等。 总结来说,cocos2d-...
标题和描述均指向了一个特定的主题:基于cocos2d-x的跨平台游戏制作,这是由刘万千在2012年3月31日的开发者大会上所作的演讲。cocos2d-x是一款广泛使用的开源游戏开发框架,特别适用于创建跨平台的游戏应用,即可以...
在cocos2d-x中实现塔防游戏,开发者需要掌握以下关键知识点: 1. **游戏场景管理**:cocos2d-x中的Scene类是游戏的顶级容器,负责管理游戏的不同阶段。开发者需要创建多个场景来表示游戏的不同状态,如主菜单、游戏...
通过这套教程,读者将能够逐步掌握Cocos2D-iPhone的使用方法,从创建简单的静态画面到实现复杂的交互式游戏,从而迈入iOS游戏开发的大门。无论是对编程感兴趣的新手,还是希望转行游戏开发的从业者,都能从中...
【游戏】★★★★★-BouncingBall1_cocos2d 是一个基于Cocos2d引擎开发的iOS游戏源代码项目。Cocos2d是一个广泛使用的开源游戏开发框架,尤其适用于2D游戏。这个项目的源码提供了学习和理解iOS游戏开发的基础,特别...
4. 用户交互:Cocos2d-iOS的触摸事件处理机制使得游戏能够响应用户的触摸操作,实现流畅的游戏控制。 5. 存档系统:可能实现了本地存档功能,保存玩家的进度和成就,以便下次继续游戏。 6. 分数和成就:通过Game ...
8. **扩展性**:Cocos2D支持插件和自定义扩展,示例可能展示了如何添加自定义功能,比如社交分享、广告集成或其他第三方服务。 9. **设计模式**:源代码可能运用了MVC(模型-视图-控制器)、观察者模式等设计模式,...
《深入解析iOS应用源码:cocos2d-iphone-0.7.3》 cocos2d-iphone是一款强大的2D游戏开发框架,专为iOS平台设计,它基于开源的cocos2d-x项目,并针对Objective-C和Apple的UIKit进行了优化。在“cocos2d-iphone-0.7.3...