拇指接龙游戏升级记录03(升级MainScene.cpp)
MainScene是拇指接龙游戏的主游戏场景文件,拥有近5000行代码。
说实在的,实现自cocos2d-x 2.x版本向当下最新的3.8.1版本的升级过程,其中涉及的技术不是一下能够说明的。有些是形式上的简单修改,更多的则是性能上的提升相应的修改。
简单总结一下主场景文件MainScene的升级工作。主要集中在如下几个方面:
1.扑克拖动相关事件的升级修改:
这一点在网络上已经有不少细致的资料,在此不赘述,请参考后面的引文。
如今的手指移动事件操作起来要比2.x时期简化多了。
2. CCArray向Vector<T>数据结构的升级,基本感觉比较流畅,没有大的障碍。
但是,仅有一点需要特别注意:在CCArray时代,removeLastObject(false)一句在Vector<T>下没有直接的对应。
removeLastObject(false)一句的意思是从数组中删除相应结点,但是内存中对应数据结构继续保留。那么在Vector<T>下如何实现的?
我的办法大致如下,请兴趣的朋友可以参考:
OLD:
Cells[col]= (Card*)TableauPiles[whichColumnForCC]->lastObject(); Card* t2=Cells[col]; Cells[col]->setPosition(m_pCurNode->getChildByTag(10006+col)->getPosition()); m_pCurNode->reorderChild(Cells[col],++zIndexForAll); Cells[col]->setPosition(m_pCurNode->getChildByTag(10006+col)->getPosition()); m_pCurNode->reorderChild(Cells[col],++zIndexForAll); //从原来位置清除扑克,但是并没有释放内存;否则,存在野指针!!!// TableauPiles[whichColumnForCC]->removeLastObject(false);//9-11
NEW:
Card* tmpCard = TableauPiles[whichColumnForCC].back(); Card* card_2015 = new Card(); card_2015->setCurrentSuit(tmpCard->getCurrentSuit()); card_2015->setNumber(tmpCard->getNumber()); card_2015->loadTexture(tmpCard->getCurrentSuit()); card_2015->setPosition(m_pCurNode->getChildByTag(10006 + col)->getPosition()); Cells[col] = card_2015; Card* t2=Cells[col]; m_pCurNode->reorderChild(t2, ++zIndexForAll); //从原来位置清除扑克 //TableauPiles[whichColumnForCC]->removeLastObject(false);//modified on 9-11 TableauPiles[whichColumnForCC].popBack();3.这个一个较大的坑,其实关键还是在于我对于3.x版本的API没有全面分析所致。例如,我在感觉部分修改结束后,编译时遇到如下所示错误:
双击上述任何一个错误,光标停留到functional文件中,而此文件是vc2013的一个标准头文件。从上面几乎任何一个错误提示在网络中搜索,几乎没有任何线索,至少到目前为止,我搜索到的几乎都是风马牛不相及的。
因为,这个文件太长,而此前我的2.x版本顺利调试通过。结合上面提供的仅有的线索(即括号中的文件mainscene.cpp)。我断定肯定是MainScene.cpp升级过程中,由于部分结合VS2013查找替换修改,可能导致部分错误,而且这种错误很可能与C++ 11新特性相关(从C++ 11知识及上面大量出现的模板形式可以断定)。
无奈之下,我硬着头皮决心一点点把上述文件完全升级到3.x表达方式。在没有彻底弄明白是哪些地方出现上述问题的情况下,升级结束,上述错误在重新编译后完全消失。
而此前,我有好几个小时悄悄地消失了......
其实的没有大问题了,结论是:如果立足于cocos2d-x c++开发的话,STL和C++ 11特性是必修课!
阅读更多
- 拇指接龙游戏升级记录03(升级MainScene.cpp)
- 拇指接龙游戏升级记录03(升级MainScene.cpp)
- 拇指接龙游戏升级记录01(CocoStudio 1.4.0.1+Cocos2d-x 2.2.3=>Cocos Studio 2.3.2+Cocos2d-x 3.8.1)
- 拇指接龙游戏升级记录02(Cocos2d-x 3.8.1集成ShareSDK遇到的问题)
- 拇指接龙游戏升级记录02(Cocos2d-x 3.8.1集成ShareSDK遇到的问题)
- 拇指接龙游戏升级记录01(CocoStudio 1.4.0.1+Cocos2d-x 2.2.3=>Cocos Studio 2.3.2+Cocos2d-x 3.8.1)
- 拇指接龙游戏从WIN32向Android移植过程问题记录(1)
- 拇指接龙游戏从WIN32向Android移植过程问题记录(2)
- 拇指接龙游戏从WIN32向Xcode 4.5移植过程问题记录
- 拇指接龙游戏中的Undo道具与STL容器deque简介
- IOS9-升级Xcode7后报错Assertion failure in -[UIApplication _runWithMainScene:处理
- Cocos2d-x简单游戏<植物大战僵尸>代码实现|第九部分:游戏场景GameScene.cpp<后续会提供源码下载链接>
- 游戏开发学习记录03-用LeanCloud在Unity中部署后端服务代码实现
- 游戏大厅升级日记 关于计分机制的Story
- Erlang单服游戏开发记录序
- 接龙游戏,你敢回答楼下提出的问题吗
- 安卓游戏盗取用户 WhatsApp 聊天记录 带给我们的思考!
- 2017.9.10 连续攻击游戏 思考记录
- Ubisoft: 游戏记录通过云存储 随时随地玩游戏
- SaveGameBackup绿色版-免费的游戏通关记录备份软件