码迷,mamicode.com
首页 > 其他好文 > 详细

cocos2dx 魔塔项目总结(一)

时间:2015-06-05 00:04:39      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:

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

魔塔天城使用的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我们用对象的名字来表示,因此,这就变得非常好理解了,对象之间通过名字来交互也更现实些。

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

cocos2dx 魔塔项目总结(一)

标签:

原文地址:http://www.cnblogs.com/sdlwlxf/p/4553197.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!