拇指接龙游戏升级记录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:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
       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没有全面分析所致。例如,我在感觉部分修改结束后,编译时遇到如下所示错误:

wKiom1ZEj1uBdXc3AAJLFuBgdXs341.jpg

 

双击上述任何一个错误,光标停留到functional文件中,而此文件是vc2013的一个标准头文件。从上面几乎任何一个错误提示在网络中搜索,几乎没有任何线索,至少到目前为止,我搜索到的几乎都是风马牛不相及的。

 

因为,这个文件太长,而此前我的2.x版本顺利调试通过。结合上面提供的仅有的线索(即括号中的文件mainscene.cpp)。我断定肯定是MainScene.cpp升级过程中,由于部分结合VS2013查找替换修改,可能导致部分错误,而且这种错误很可能与C++ 11新特性相关(从C++ 11知识及上面大量出现的模板形式可以断定)。

 

无奈之下,我硬着头皮决心一点点把上述文件完全升级到3.x表达方式。在没有彻底弄明白是哪些地方出现上述问题的情况下,升级结束,上述错误在重新编译后完全消失。

 

而此前,我有好几个小时悄悄地消失了......

 

其实的没有大问题了,结论是:如果立足于cocos2d-x c++开发的话,STL和C++ 11特性是必修课!

 















本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/1712313 ,如需转载请自行联系原作者




相关文章
|
3月前
|
人工智能 算法 计算机视觉
我的自描外挂制作日志——FPS类游戏的自瞄【构思准备】
我的自描外挂制作日志——FPS类游戏的自瞄【构思准备】
47 0
|
4月前
daimayuan 代码源大富翁游戏
daimayuan 代码源大富翁游戏
18 0
|
11月前
|
图形学
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
【unity每日一记】——游戏剧情模式中MoveTowards和GameObject.Find()的应用
80 0
C++急速赛车小游戏(注释几天后更新)
C++急速赛车小游戏(注释几天后更新)
218 0
C++急速赛车小游戏(注释几天后更新)
|
图形学
Unity3D手机斗地主游戏开发实战(03)_地主牌显示和出牌逻辑
Hi,之前有同学说要我把源码发出来,那我就把半成品源码的链接放在每篇文件的最后,有兴趣的话可以查阅参考,有问题可以跟我私信,也可以关注我的个人公众号,互相交流嘛。当然,代码也是在不断的持续改进中~ 上期我们实现了叫地主功能,不过遗留了一个小功能:叫地主完成以后,要显示地主的3张牌,这期首先弥补这块的功能; 接着我们要进入开发出牌逻辑的开发阶段,好了,废话不多说,继续我们斗地主开发之旅~ 地主牌的显示 我们在玩家界面的顶部中间位置,放置一个新的GameObject,命名为BidCards,用来记录3张地主牌的显示位置。
1848 0