cocos2d-x入门学习(五)跨版本代码移植实例之【梦幻连连看】

本文详细介绍了如何将基于cocos2d-x 2.1.2的《梦幻连连看》游戏移植到2.2.2版本,涉及Unicode格式转换、随机函数替换、函数参数调整、屏幕尺寸适配、音乐格式问题以及CCString::createWithFormat等错误的解决方法,通过实例展示了不同版本间的代码移植过程。
摘要由CSDN通过智能技术生成

《梦幻连连看》源代码来自原作者kuloveyouwei,他的版本是cocos2d-x 2.1.2,

他在博客中详细解读了源代码,其博客地址http://  blog.csdn.net/kuloveyouwei/article/details/12912875
源代码和素材下载地址http://    download.csdn.net/detail/kuloveyouwei/7158157

 

下面我们要示范的是如何把cocos2d-x不同版本代码移植,

本案例是从cocos2d-x 2.1.2+mac环境到cocos2d-x-2.2.2+VS2010。

 

1、创建工程。用VS2010打开编译运行,使得HelloWorld界面正常显示。
2、下载本游戏所需的资源,将下载的images和Sounds文件夹资源放置新建项目的"Resources"目录下。
3、把下载的Resources文件夹的资源放置到新建项目的"Resources"目录下。
4、把下载的Classes里(除了AppDelegate的.h和.cpp外)的.cpp和.h、.pch文件放置到新建项目的Classes目录下。

5、把下载的Classes里的《levelinfo.plist》文件放置到新建项目的"Resources"目录下。
6、右键——添加——现有项目,把我们项目的Classes目录下的.cpp和.h、.pch文件都添加进去。

7、代码调整:

关于Unicode 格式

编译运行后,提示很多这个warning:
该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失。
之前忽视了warning,后来才发现这个是大问题,因为会影响到回车符。
以前在LINUX或其他的跨平台下写的,拷到VS2010后常常会提示如此,这是因为不同平台的换行符所造成的。VS中有unicode字符 ,打开后再保存, vs会自动保存为unicode格式.但有时unicode字符后的"未正确识别导致字符串不能结束,unicode字符后的换行未正确识别导致//后的注释不能正常结束。
但问题怎么解决呢?我再才找到源文件,复制了一份,全部一一保存为Unicode 格式。操作方法如下:在VS打开该文件前,先用电脑中记事本打开,然后文件--另存为,在弹出的对话框的下页的编码中选择unicode编码和保存类型为所有文件即可。(风险:交叉编译到安卓的时候,gcc的编译器可能会不认识Unicode 格式,如果可以的话,先尝试找1 2个把格式另存为ANSI看看能否成功。)
修改好后复制到项目的class目录并覆盖掉原来的问题,记得不用复制AppDelegate的.h和.cpp。(此外,我备份了一个,以防后续要用)

 

关于随机函数和随机种子

错误提示:srandom 找不到标识符,
原因是库函数中没有srandom()、random(), 只有srand()跟rand()函数
把srandom()用srand()函数代替就没有这个错误了。


报错提示:helloworldscene.cpp(403): error C2660: “srand”: 函数不接受 0 个参数
我们通过srand((unsigned)time(NULL));或者srand(int(time(0)));种子函数解决,即要求一个无符号的整形参数置随机数生成器的启动值
报错地方一:
int times=arc4random()%5+1;改为
srand((unsigned)time(NULL));
int times=rand()%5+1;
报错地方二:
float yoffset=arc4random()%40+1; 改为:
srand((unsigned)time(NULL));
float yoffset=rand()%40+1;

 

关于函数参数
报错提示:“类型转换”: 无法从“void (__thiscall PauseLayer::* )(void)”转换为“cocos2d::SEL_MenuHandler”

参考资料1:http://   blog.csdn.net/xuzhuang2008/article/details/9280889
参考资料2:http://   my.eoe.cn/599048/archive/24801.html
解决方法如下:
我们先从容易理解的开始。
例如这句this->scheduleOnce(schedule_selector(GameLayer::playSound1), 65);
找到 .cpp文件中找到void GameLayer::playSound1()函数进行修改为void GameLayer::playSound1(float dt)
.h文件中找到void playSound1(void);修改为 void playSound1(float dt);

例如this->scheduleOnce(schedule_selector(GameLayer::playSound2), 60);
找到 .cpp文件中找到void GameLayer::playSound2()函数进行修改为void GameLayer::playSound2(float dt)
.h文件中找到void playSound2(void);修改为 void playSound2(float dt);

例如这句this->scheduleOnce(schedule_selector(GameLayer::playSound3), 62);
找到 .cpp文件中找到void GameLayer::playSound3()函数进行修改为void GameLayer::playSound3(float dt)
.h文件中找到void playSound3(void);修改为 void playSound3(float dt);

同理修改以下各行,找到对应的函数修改参数为(float dt)
this->schedule(schedule_selector(HelloWorld::wavesAnimation), 10);
this->schedule(sche

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值