cocos2dx3.2开发 RPG《Flighting》(十五)最后的总结说明,以及源码分享

一、前言

这次的Flighting系列教程一口气写了2天,到这里就要结束了。接下来我说明补充一下一些前面没有提到,但是我觉得有必要讲一下的。

二、正文

1.怪物的出场

前面已经说了一个个的XXXMessageUtil,其实StateMessageUtil是比较特别的。首先我们先看看StateMessage的Excel表(关卡)

前面的字段大家可以参透参透,我主要讲一讲monster字段

monster字段表示这个关卡的怪物对队列,用“|”隔开

class StageMessage{
public:
	int id;
	string name;
	int reward_money;
	int reward_exp;
	int boss;
	string reward_item;
	deque<MonsterMessage> monsterDeq;
};

可以看到,我们的StageMessage也相应的有一个队列monsterDeq

void StageMessageUtil::init(){

	std::string  jsonStr = cocos2d::FileUtils::getInstance()->getStringFromFile("Json/StageMessage.json");
	rapidjson::Document _mDoc;

	std::string mstr = jsonStr;
	RETURN_IF(NULL==mstr.c_str()||!mstr.compare(""));
	_mDoc.Parse<0>(mstr.c_str());
	RETURN_IF(_mDoc.HasParseError()||!_mDoc.IsObject());
	const rapidjson::Value &pArr = _mDoc["json"];

	CCLOG("Size = %d",pArr.Capacity());

	for(int i=0;i<pArr.Capacity();++i){
		StageMessage stage;
		const rapidjson::Value &temp = pArr[i];
		int key = temp["id"].GetInt();
		stage.id = temp["id"].GetInt();
		stage.name = temp["name"].GetString();
		stage.boss = temp["boss"].GetInt();
		stage.reward_money = temp["reward_money"].GetInt();
		stage.reward_exp = temp["reward_exp"].GetInt();
		stage.reward_item = temp["reward_item"].GetString();
		//这里开始初始化队列
		string monsterStr = temp["monster"].GetString();
		char c[64];
		strcpy(c,monsterStr.c_str());
		char* s = strtok(c,"|");
		while(s != NULL){
			int id_num;
			stringstream ss;
			ss << s;
			ss >> id_num;
			CCLOG("GET ID:%d",id_num);
			MonsterMessage msg = MonsterMessageUtil::getInstance()->getMessageById(id_num);
			stage.monsterDeq.push_back(msg);
			s = strtok(NULL,"|");
		}
		CCLOG("DEQ SIZE = %d",stage.monsterDeq.size());
		stageMap.insert(make_pair(key,stage));
	}
	CCLOG("STAGE MAP SIZE = %d",stageMap.size());
	return;
}

初始化怪物队列的工作在代码标注的哪里开始

得到队列以后,我们在FlightLayer里面可以检测现在有多少个怪物,如果少于规定个数(我这里是4个),就出来一个

void FlightLayer::updateMonster(){
	int count = 0;
	for(auto it=m_rolesArray.begin();it!=m_rolesArray.end();++it){
		if((**it)->getRoleType() == Role::ROLE_TYPE_MONSTER){
			++count;
		}
	}
	if(count < 4){
		if(m_monsterDeq.size() == 0){
			return;
		}
		MonsterMessage msg = *m_monsterDeq.begin();
		m_monsterDeq.pop_front();
		Monster* monster = Monster::create(msg.r_name,this);
		monster->initWithMessage(msg);

		monster->setPosition(2000,260);
		this->addRole(monster);
		CCLOG("ADD MONSTER:%s TO LAYER",msg.name.c_str());
	}
	return;
}

2.源码分享

源码下载地址:点击打开链接

我在上传之前在VS2012+cocos2dx3.2平台下运行成功。

3.已经打包好的apk

上次消灭星星大家说移植到Android平台有问题,这次我特意也移植了,android平台是可以运行的。

APK下载地址:点击打开链接

至此,整个Cocos2dx 3.2开发RPG《Flighting》系列到此结束,谢谢大家。

我的csdn地址:http://blog.csdn.net/hezijian22

邮箱地址:[email protected]

如有问题或指教,欢迎与我交流,谢谢。

时间: 2024-12-28 04:43:26

cocos2dx3.2开发 RPG《Flighting》(十五)最后的总结说明,以及源码分享的相关文章

MapReduce(十五): 从HDFS读取文件的源码分析

以Map任务读取文本数据为例: 1)   LineRecordReader负责对文件分割的定位,以及对读取每一行内容的封装供用户Map任务使用.每次在定位在文件中不为0的位置时,多读取一行,因为前一个处理该位置之前的数据时,会完整把该一行已经读取并处理. 2)   LineReader负责对所要访问文件输入流的数据进行每一行读取,只实现对每一行读取的逻辑. 3)   DFSDataInputStream封装了DFSInputStream的实现,直接调用DFSInputStream接口完成. 4)

QT开发(六十五)——QT样式表编程实例

QT开发(六十五)--QT样式表编程实例 一.QComboBox组合框样式定制 1.基本定义 QComboBox  {     border: 1px solid gray;     border-radius: 3px;     padding: 1px 2px 1px 2px;  # 针对于组合框中的文本内容     min-width: 9em;   # 组合框的最小宽度 } QComboBox::drop-down {     subcontrol-origin: padding;   

Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(十五):消息加密 前不久,微信的企业号使用了强制的消息加密方式,随后公众号也加入了可选的消息加密选项.目前企业号和公众号的加密方式是一致的(格式会有少许差别). 加密设置 进入公众号后台的“开发者中心”,我们可以看到Url对接的设置: 点击[修改设置],可以进入到修改页面: 加密的方式一共有3种: 明文模式,即原始的消息格式 兼容模式,明文.密文将共存,正式发布的产品不建议使用(因为仍然包含了明文,达不到加密的效果) 安全模

QT开发(二十五)——QT模板库

QT开发(二十五)--QT模板库 一.QTL模板库简介 QT模板库(QT Template Library 简称QTL)是一套提供对象容器的模板. QTL提供了对象的链表.对象的矢量(动态数组).从一个类型到另一个类型的映射(或称为字典)和相关的迭代器和算法.容器是包含和管理其它对象的一个对象,并且提供迭代器对被包含的对象进行访问. 1.QT容器类简介 容器是能够在内存中存储其他特定类型的对象的对象,一般是通用的模板类.QT提供了自己的一套容器类,即在QT的应用程序中,可以使用标准C++的STL

QT开发(三十五)——QT进程间通信

QT开发(三十五)--QT进程间通信 Qt 是一个跨平台的应用框架,其进程间通信机制当然可以使用所在平台的进程间通信机制,如在Windows平台上的Message机制.共享内存.文件映射.管道.Socket等.其中,Qt对一些许多平台共有的IPC机制进行了封装. 一.TCP/IP 其实就是通过网络模块实现的IPC.不过Qt对其进行了封装,并提供了两个层次的API,包括应用程序级的QNetworkAccessManager, QFtp等和底层的QTcpSocket, QTcpServer, QSs

QT开发(四十五)——XML文件解析总结

QT开发(四十五)--XML文件解析总结 一.XML文件解析方式的特点 1.DOM解析XML文档的特点 基于DOM的解析器的核心是在内存中建立和XML文档相对应的树状结构.XML文件的标记.标记中的文本数据和实体等都是内存中的树状结构的某个节点相对应. 优点:可以方便地操作内存中的树状节点 缺点:如果XML文件较大,或者只需要解析XML文档的一部分数据,就会占用大量的内存空间 2.SAX解析XML文档的特点 SAX解析的核心是事件处理机制,SAX采用事件机制的方式来解析XML文档.使用SAX解析

开发指南专题十五:JEECG微云快速开发平台EXCEL导入导出

 开发指南专题十五:JEECG微云快速开发平台EXCEL导入导出 14.EXCEL导入导出 Excel的导入导出抽取通用功能,简化大家对POI的操作,对实体对象进行简单的注解配置就可以完成导入导出,模板的使用更是可以让打造漂亮的Excle报表,从而使大家从重复的工作中解脱出来,更加关注与业务的处理. 14.1注解介绍    注解名 作用对象 描述 是否必须 Excel 字段 对Excel字段的cell属性设置 是 ExcelCollection 字段 对集合对象进行标记表示一对多导出 否 E

MiS603开发板 第十五章 MCB DDR3内存测试

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第十五章 MCB DDR3内存测试 15.1 DDR3存储器模块及其测试 图像算法硬件最关键的一部分就是内存,内存保

提高你开发效率的十五个 Visual Studio 使用技巧

提高你开发效率的十五个 Visual Studio 使用技巧 相信做开发的没有不重视效率的.开发C#的都知道,我们很依赖VS,或者说,我们很感谢VS.能够对一个IDE产生依赖,说明这个IDE确实 有它的独特之处.无容置疑,VS是一个非常强大的IDE,它支持多语言编辑.支持C#,VB,C/C++,HTML......它拥有强大的调试编译功能.它让我们不用去记住那些安装,环境变量设置,服务器设置,编译的繁琐过程.高度集成化.凡事有利有弊,在敏捷开发盛行的时代,VS是否值得我们使用是 无容置疑的.但是