游戏引擎:通过配表的方式来完成游戏开发
一:目标
1.合理的节约开发周期,减少重复劳动,逐渐实现固化逻辑
2.实现程序开发新功能,策划通过配表来完成游戏开发
二:思路
1.我的这套引擎逻辑 借鉴了页游的一些思路,通关配表来实现游戏开发
2.之所以选择cocos2dx开发 是因为coco2dx 前期采用了 代码和界面的绝对分离的做法 能够最大限度的缩短开发周期
3.要让策划看的懂,就必须固化功能,减少程序冗余,精简逻辑结构
三:如何实现
1.如何实现通过配表来完成开发,简单说就是怎么把配表转成代码
2.采用什么格式来存储这些配表数据
3.尽可能简化配表属性,同时要完美的来实现用户的多操作。如,用户捡取道具的操作,可能会触发
1.道具栏道具增加 2道具在界面上消失 3播放捡取动画 4实现一些特殊的功能(捡取钥匙 那么们机关这个时候 就应该可以被点击)
4.因为逻辑是配表完成的,用户的操作具有不可控性 ,那么迫切需要断点保护机制,来防止用户的一些特殊操作,如强退游戏,导致存储数据混乱
5.怎么实现复杂的用户交互机制 比如说机关
四:最终实现
1.本人总结有两种方式实现 1,通过plist来实现配表 ,2 通过excel来实现
plistexcel 实现 目前还不是很成熟 只能处理前端的层级关系 和关联
有兴趣的可以去看哈xlsx2json 是一个开源的项目
https://github.com/koalaylj/xlsx2json.git
2.本人采用的json来存储数据 json是目前很常用的数据格式
3.简化代码,一个引擎可以这样简单
全部的引擎文件通过66来标记用户是多操作 多操作处理逻辑通过数组来同步实现
4.断点保护,采用的是和3A大作 一样的思路 ,通关节点来存储数据,用户强退游戏后可以恢复到用户存储数据时的状态
5.因为机关的复杂性 采用的是代码和配表相结合的机制 type 表示机关类型
表代码段 如下
case 3://数字 0-9
{
CCLOG("机关正确%s",g_organPassword.c_str());
if(button->getTag()==0) {
CCLOG("我点了OK,结果:%s", itemStr.c_str());
if(itemStr==g_organPassword) {
organEvents(g_organSucceed);
OrganScene::gameStop();
}
}else{
SimpleAudioEngine::getInstance()->playEffect("Sounds/click-button.mp3");
intko =atoi(button->getTitleText().c_str());
ko++;
if(ko>9) {
ko=0;
}
std::stringnumeral =StringUtils::format("%d",ko);
itemStr.replace(button->getTag()-1,1, numeral);
button->setTitleText(cocos2d::StringUtils::format("%d",ko));
}
}
break;
五:成效
一个密室逃脱类的游戏 开发周期只需要五天 三天开发 两天测试 然后直接上线
六:下期预告
通过rapidjson来实现在coco2dx中来实现数据的存储和编辑