展会信息港展会大全

cocos2dx3.2开发 RPG《Flighting》(十五)最后的总结说明,以及源码分享,cocos2dx3.0label
来源:互联网   发布日期:2015-09-28 13:53:28   浏览:1912次  

导读: cocos2dx3.2开发 RPG《Flighting》(十五)最后的总结说明,以及源码分享,cocos2dx3.0label 一、前言 这次的Flighting系列教程一口气写了2天,到这里...

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

一、前言

这次的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::stringjsonStr = 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

邮箱地址:578690286@qq.com

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

http://www.bkjia.com/Androidjc/941600.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/941600.htmlTechArticlecocos2dx3.2开发 RPG《Flighting》(十五)最后的总结说明,以及源码分享,cocos2dx3.0label 一、前言 这次的Flighting系列教程一口气写了2天,到这里...

赞助本站

人工智能实验室

相关热词: android开发 应用开发

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港