文档章节

拇指接龙游戏升级记录03(升级MainScene.cpp)

乐搏学院
 乐搏学院
发布于 2017/02/08 11:19
字数 915
阅读 7
收藏 0

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特性是必修课!

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “青峰” 博客,请务必保留此出处http://zhuxianzhong.blog.51cto.com/157061/1712313

© 著作权归作者所有

乐搏学院
粉丝 9
博文 526
码字总数 707467
作品 0
丰台
程序员
私信 提问
Linux Deepin系统更新记录(2014-03-12)

今日,Linux Deepin 2013进行了系统更新推送,下面是系统更新解决的部分问题与软件更新情况,供大家参考。 Bug修复 0003092:将软件中心图标发送到桌面,注销之后图标不见了 软件中心更新 更...

cxbii
2014/03/12
541
3
手游联运 H5平台 开源 免费 运营推广 全新升级

手游联运 H5平台 开源 免费 运营推广 全新升级 手游联运系统、H5平台开源免费版来啦!溪谷软件为回馈广大新老客户,特别制作此两款免费版游戏运营推广系统,此次两款系统全新升级,不仅修复了...

溪谷软件
2017/03/27
280
3
捏造的信仰/hydrogen-dao

#hydrogen-dao hydrogen-dao 是一个 Java 的轻量级的数据库访问库,依赖标准的 JDBC 接口。主要功能有: 连接池管理,状态查看 跨数据库的事务 根据参数值来动态组装 select/insert/update/d...

捏造的信仰
2015/03/06
0
0
Fly的狐狸/Jflyfox

个人博客 博客地址:http://www.jflyfox.com/blog 本网站后台基于Jfinal开发,模板基于beetl,数据库为Mysql。 老版本地址如下 演示地址:http://jflyfox.oschina.mopaas.com/ 管理地址:htt...

Fly的狐狸
2014/11/04
0
0
Linux Deepin系统更新记录(2014-03-19)

今日,Linux Deepin 2013进行了系统更新推送,下面是系统更新解决的部分问题与软件更新情况,供大家参考。 Bug修复 0003026: 深度终端 右键菜单清屏无效. 修复bug:桌面应用程序组不能通过拖...

cxbii
2014/03/19
457
4

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
5
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部