cocos2dx 魔塔项目总结(一)

《魔塔天城》发布已经有半年的时间了,一直想找时间来总结一下这个项目,但总是一拖再拖。如果再这么拖下去,就永远都不会有时间来写这个总结了,时间总是挤出来的。

魔塔天城使用的cocos2dx 3.2版本,当时这个版本刚刚发布。网上的学习资料都是2.0版本的。只有官网提供的示例demo是最新的,好在这些demo涵盖的面比较宽,对于学习API来说已经足够了。

魔塔的程序框架并不复杂

总的来说就是这几大块,对象继承结构,碰撞检测,node和layer层次结构,UI实现,剧情脚本

首先是对象继承结构,在我的程序世界中 World是由Cell构成的,所有的事物都是Cell。Cell里有所有事物的基本属性和方法。Cell有它自己的属性集合,这个集合就是我们所说的MVC模式中model,我们从外部读取数据表格文件中的数据(这里我使用了csv文件),然后初始化这些Cell的model(注意:数据表格中的数据通常记录的是类的基本属性),在游戏中不同的对象model会产生不同的变化,如果我们想要保存这些变化,只要保存这些容易发生变化的属性就行了,这里假设保存在model_New里。然后下次再加载存档的时候,首先利用数据表格初始化model,然后再加载保存的model_New覆盖合并当前model,这就是基本的存档功能。

所以我的Cell必须实现这些初始化,加载并保存model的功能,这里我们就可以添加这些函数

virtual void initModel() = 0;
virtual void loadModel(ValueMap &map) = 0;
virtual ValueMap saveModel() = 0;

这里我们使用cocos2dx 3.2 提供的 ValueMap数据结构实现我们的model。

每一个事物都有自己的名字对吧,因此我们的Cell里也要定义名字属性 name。

事物之间是需要交互的,这样我们的世界才如此生机盎然。在程序里,事物就是对象,那么如何让对象之间交互呢,没错,利用事件Event。cocos2dx已经为我们实现好了这些事件机制,我们唯一需要做就是为每个对象添加事件侦听或回调函数。

事件监听

_listener = EventListenerCustom::create(getName(), [=](EventCustom *event){onTrigger(event);});_eventDispatcher->addEventListenerWithFixedPriority(_listener, 1);

回调函数

virtual bool onTrigger(EventCustom *event) = 0;

事件机制就是观察者模式的衍生,在cocod2dx中我们的事件都由EventDispatcher的一个实例来管理,这就像是接线员一样。会根据号码(事件id)来传递事件。这个事件id我们用对象的名字来表示,因此,这就变得非常好理解了,对象之间通过名字来交互也更现实些。

未完待续(后面会依次介绍整个项目)

时间: 2024-09-30 00:06:58

cocos2dx 魔塔项目总结(一)的相关文章

在Xcode 6 beta里编译Cocos2d-x iOS项目时失败

转载 在Xcode 6 beta里编译Cocos2d-x iOS项目时可能会失败,提示如下错误: Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHandler in libcocos2dx iOS.a(tif_unix.o) _unixWarningHandler in libcocos2dx iOS.a(tif_unix.o) _empty_output_

一个cocos2d-x的项目

前几天完成了一个cocos2d-x的项目,放在git上: https://github.com/gittor/Jigsaw 采用cocos的版本是3.7.1. 项目是一个拼图的游戏,市面上的拼图类游戏都是png或jpg静图,这个游戏用的都是gif动图.下面是预览.

解决Xcode 6 编译Cocos2d-x iOS项目失败

在Xcode 6 beta里编译Cocos2d-x iOS项目时可能会失败,提示如下错误: Undefined symbols for architecture i386: "_fwrite$UNIX2003", referenced from: _unixErrorHandler in libcocos2dx iOS.a(tif_unix.o) _unixWarningHandler in libcocos2dx iOS.a(tif_unix.o) _empty_output_buf

cocos2d-x创建项目(系列二)

1.需要的软件 1.1 VS2012 下载地址 百度吧! 1.2 cocos2d-x-3.0rc0.zip下载地址 1.3 CocoStudio_V1.3.0.0.exe 下载地址 1.4 NDK    android-ndk-r9d-windows-x86.zip 下载地址 1.5 SDK    adt-bundle-windows-x86-20131030.zip 下载地址 1.6 Visual Assist X 10.8.2029.0.7z 1.7 python2.7 python_win

cocos2dx lua 项目如何打包成exe文件

对于一直想把cocos2d-x项目发给朋友看,但是又不会打包成exe,阅读完此文章就会实地操作cocos2dx lua 项目如何打包成exe文件. 不过在此之前要说明一点,最好做成release版本后再打包成exe,不然的话,别人的机器可能会提示缺少dll之类的,(release版本也一样,也可以像下列方法) 下面,你要打包cocos2d-x中的Test项目成一个exe文件 1:可以再cocos2d-x目录下的Debug.win32的全部复制到一个文件夹里 2:然后把Test所有的资源也复制到上

Cocos2dx: 创建项目 -- Mac

准备工作 首先下载Cocos2dx 3.6到你的Mac上,解压之后把它保存在一个你喜欢的位置.你可以在这里下载Cocos2dx 3.6:http://www.cocos2d-x.org/download 然后,查看一下你的Mac上有没有安装Python 2.7.5 或者更高版本.查看方法:打开终端并输入命令python.如果已经安装了的话,会有下面的信息出来: ====================================================================

VS2013+cocos2d-x调试项目的同时在控制台(终端--黑窗)打印调试信息

今天!有会儿空功夫,装了cocos2d-x v3.10. 新建项目,打开,发布,打包!(打包环境配置),真是一键搞定派. 好吧!这就是发展吧.快,简,易.只要你喜欢随心所欲. 在小玩之余发现了一个奇怪的事情,标准输出信息(如std::cout.printf等)不是都是输出到控制台的(也就是传说中的黑窗)?控制台那? 只有调试的游戏项目孤零零的站在那里! 我这里除了把HelloWorld!换了张图片以外!还有就是加了个onTouchBegan(),onTouchEnd()用于输出打印触摸的点的坐标

cocos2dx - wp8项目配置遇到的问题及解决方案

在这篇文章中,我们将来构建cocos2dx-wp8的环境配置,首先我们需要在windows+vs环境下安装cocos2dx. 如果你对windows+vs环境下安装cocos2dx还不熟悉,请参考:Win7(64位)下 vs2012 + cocos2dx2.2配置 然后我们找到E:\cocos2d-x-2.2.5\samples\Cpp\HelloCpp\proj.wp8-xaml(我这里cocos2dx安装在E盘)下面的HelloCpp项目文件,在VS中打开. 我们会看见HelloCpp和He

cocos2d-x创建项目

2.0之后的创建项目方法 第一步,首先 cd cocos2d-x-2.2.1/tools/project-creator/ 第二步, ./create_project.py -project HelloWorld -package com.xxhong.HelloWorld -language cpp 第三步,到这里来找你的项目就可以了,cocos2d-x-2.2.1/projects/HelloTest