`

cocos2d里面如何实现MVC(三)

 
阅读更多

 

引子:前面两篇文章介绍了一些关于在cocos2d里面如何实现mvc的理论知识,接下来的这三篇教程,我将用一个简单的教程示例,给大家演示一下具体代码实现细节。

 

    这篇文章的写作目的就是让大家更好地理解如何在cocos2d里面实践mvc模式(当然,这里演示的不一定是标准的mvc,因为cocos2d特殊的编程方式。但是,这并不妨碍我们编写更好的代码,你们说对吧?),本文是基于前两篇文章的,所以,在继续阅读之前,我强烈建议你先读一下第一篇的理论介绍。

情景

    我们将制作一个简单的面板解谜游戏(board puzzle game),当然,我们不是简单地开发一个游戏,而是要利用mvc开发出一个简单的“游戏框架”,而且这个框架将会在我的新游戏里面使用到,它具有如下一些特性:

  1. 一个n行n列的游戏面板(game board),n可以随着游戏难度进行变化。 
  2. 这个游戏面板里面会包含一些“小方块(game pieces)”,而且每一个game board上都只能放一个game piece。
  3. 这个游戏面板可以初始化一些固定的小方块,玩家在游戏过程中,是不能移动这些小方块的。
  4. 这里还定义了一个“工具箱(toolbox)”,它上面可以放置许多小工具(toolbox item),它们可以看作是“可放置可移动小方块的槽子”。
  5. 小工具(或者叫槽子)上面可以放置许多同一类型的小工具。
  6. 这些小工具可以从工具箱上面移动,并且可以放置到game board 上面。


 

基本概念

来自 wikipedia:

    model负责管理应用领域的数据和行为逻辑,同时负责响应对自己的状态数据请求(这些请求通常是从view过来的),然后响应一些指令来更改自身的状态(这些请求通常是来自controller的)。在一个事件驱动的系统中,model会通知订阅者(observers)(通常是views)它的状态改变,这样view就可以做相应的显示更新。

    view则根据model的状态来合理地显示,通常是一些UI元素。一个model可以对应多个view,比如,同一数据的柱状图、饼状条、曲线图等。

   controller负责接收多用户输入和调用model的一些方法。一个controller通过从用户那里获得输入,然后操作model对象,最后,model通知view来更新显示。

   从维基百科的定义中,我们可以识别出以下几个主要的类(我们会在后面把model给加上去):

  1. GameBoardView 代表应用程序的主视图
  2. GameBoardController 是GameBoardView的一个控制器。


 请注意,这里的实线代表一种直接的关联关系(controller里面包含一个view的引用),而虚线则代表了一种间接的关联(通过观察者模式)。这里的直接关联后面会用来实现touch事件处理。

实现

项目组织结构

    在XCode4里面基于cocos2d的默认模板创建一个新的项目之后,我们又创建了下面这些Groups:

  1. View – views & controller 组 (我们也可以把view和controller放在那个不同的group里面,但是,由于我们两个有直接的关联关系,为了方便,我就把它们放在一些了)
  2. 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的骨架,在接下来的游戏逻辑中,我们可以在上面做很多文章。

接下来做什么

    该项目进行到现在,已经为我们引入一些更高级的概念打下了良好的基础,所以,在下一篇教程里,我们将涉及下面两个东西:

  1. 处理touch事件.
  2. 引用model的概念.
转载:http://www.cnblogs.com/andyque/archive/2012/03/18/2390100.html
  • 大小: 30.2 KB
  • 大小: 14.5 KB
  • 大小: 18.4 KB
分享到:
评论

相关推荐

    cocos2D-lua 核心编程内置代码

    三、Lua脚本与Cocos2d-lua的结合 Lua脚本与Cocos2d-lua的结合使得游戏逻辑编写更加直观。Lua代码可以直接调用Cocos2d-lua的API,创建节点、设置属性、响应事件等。例如,`cc.Director:getInstance():runWithScene...

    GameBoard-《cocos2d-x如何实现MVC》系列中的完整实例

    "GameBoard-《cocos2d-x如何实现MVC》系列中的完整实例"是一个关于如何在cocos2d-x中应用Model-View-Controller(MVC)设计模式的实际项目。MVC模式是一种软件架构模式,常用于构建可维护性和扩展性较高的应用程序,...

    Lua实现PureMVC

    这个是一个根据AS3(ActionScript 3) pureMVC而转换过来的lua pureMVC。所有的接口完全跟AS3版本一致...注意,这个PureMVC中的 class(ClassName, BaseName) 函数并不提供,因为此框架本意就是为了用于cocos2d-x-lua中。

    cocos2d-x C++实现切水果刀刃效果

    在本文中,我们将深入探讨如何使用C++编程语言在cocos2d-x游戏引擎中实现一个生动逼真的“切水果”刀刃效果。cocos2d-x是一个流行的开源跨平台2D游戏开发框架,它基于C++,并支持多种操作系统,如iOS、Android和...

    cocoscreator使用puremvc

    Cocos Creator是一款强大的2D和3D游戏开发引擎,它提供了直观的可视化编辑工具和灵活的组件系统,使得游戏开发变得更加高效。PureMVC则是一个经典的多层应用程序框架,最初设计用于ActionScript环境,但现在已经有了...

    cocosLua中MVC的应用

    在游戏开发领域,Cocos2d-x是一款广泛使用的开源跨平台2D游戏引擎,而Cocos2d-x Lua则是其支持的脚本语言之一,它提供了便捷的lua接口来实现游戏逻辑。MVC(Model-View-Controller)是一种常见的软件设计模式,常...

    在IPhone上用Cocos2d做的一个小游戏

    游戏逻辑的实现主要依赖于Cocos2d的事件处理机制和动作系统。例如,当用户触摸屏幕时,我们可以监听Touch事件,触发忍者发射飞镖的动作。这涉及到EventDispatcher的事件监听和处理,以及Action对象的创建和执行,如...

    cocos2d-js-mvc:基于cocos2d-js的mvc框架,现已不再维护,目前更新的是基于cocos creator的游戏框架ituuz-x

    MVC是一种软件设计模式,将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller),以实现数据、界面显示和用户交互的分离,提高代码的可维护性和可扩展性。 Cocos2d-js是Cocos2d-x的...

    基于Cocos2d-x框架,并使用MVC架构的棋类游戏

    基于Cocos2d-x框架,并使用MVC架构的一个棋类游戏。 Pure MVC架构,构建可维护的Cocos2d-x游戏。 ###使用的框架 Cocos2d-x2.2.3 ###apk下载地址 应用宝 360手机助手 ###相关博客 架构篇:...

    cocos2dx用c++实现MoonWarriors

    《cocos2dx用c++实现MoonWarriors》是一款基于Cocos2d-x游戏引擎,用C++语言编写的简单游戏。Cocos2d-x是一个跨平台的2D游戏开发框架,它允许开发者使用C++、Lua或者JavaScript来创建游戏,并能在iOS、Android、...

    lua实现cocos2d-x的mvvm框架

    MVVM源于MVC(Model-View-Controller)模式,期间还演化出MVP(Model-View-Presenter)模式。MVVM的出现促进了GUI前端开发和后端开发逻辑的分离,提高了前端开发效率。 MVVM的核心是数据驱动即ViewModel,ViewModel是...

    cocos2d-x飞机游戏 源码

    在代码实现上,cocos2d-x遵循MVC(模型-视图-控制器)设计模式,将数据、显示和逻辑分离,使得代码结构清晰,易于维护。游戏的主循环通常在Director类中,负责更新场景、渲染画面、处理输入等。 总结来说,cocos2d-...

    cocos2d-x 2012-03-31开发者大会演讲稿PDF(6)-刘万千 基于cocos2d-x的跨平台游戏制作20120331.pdf

    标题和描述均指向了一个特定的主题:基于cocos2d-x的跨平台游戏制作,这是由刘万千在2012年3月31日的开发者大会上所作的演讲。cocos2d-x是一款广泛使用的开源游戏开发框架,特别适用于创建跨平台的游戏应用,即可以...

    cocos2d-x C++ 版本 塔防 游戏

    在cocos2d-x中实现塔防游戏,开发者需要掌握以下关键知识点: 1. **游戏场景管理**:cocos2d-x中的Scene类是游戏的顶级容器,负责管理游戏的不同阶段。开发者需要创建多个场景来表示游戏的不同状态,如主菜单、游戏...

    知易Cocos2D-iPhone开发教程(1-8)全套文档

    通过这套教程,读者将能够逐步掌握Cocos2D-iPhone的使用方法,从创建简单的静态画面到实现复杂的交互式游戏,从而迈入iOS游戏开发的大门。无论是对编程感兴趣的新手,还是希望转行游戏开发的从业者,都能从中...

    IOS应用源码之【游戏】-BouncingBall1_cocos2d.rar

    【游戏】★★★★★-BouncingBall1_cocos2d 是一个基于Cocos2d引擎开发的iOS游戏源代码项目。Cocos2d是一个广泛使用的开源游戏开发框架,尤其适用于2D游戏。这个项目的源码提供了学习和理解iOS游戏开发的基础,特别...

    IOS应用源码之【游戏】ABC123_使用cocos2d开发的游戏.rar

    4. 用户交互:Cocos2d-iOS的触摸事件处理机制使得游戏能够响应用户的触摸操作,实现流畅的游戏控制。 5. 存档系统:可能实现了本地存档功能,保存玩家的进度和成就,以便下次继续游戏。 6. 分数和成就:通过Game ...

    iOS实例开发源码——jotaeme1212-Ejemplos-en-Cocos2D-320a463.zip

    8. **扩展性**:Cocos2D支持插件和自定义扩展,示例可能展示了如何添加自定义功能,比如社交分享、广告集成或其他第三方服务。 9. **设计模式**:源代码可能运用了MVC(模型-视图-控制器)、观察者模式等设计模式,...

    IOS应用源码之cocos2d-iphone-0.7.3.zip

    《深入解析iOS应用源码:cocos2d-iphone-0.7.3》 cocos2d-iphone是一款强大的2D游戏开发框架,专为iOS平台设计,它基于开源的cocos2d-x项目,并针对Objective-C和Apple的UIKit进行了优化。在“cocos2d-iphone-0.7.3...

Global site tag (gtag.js) - Google Analytics