quick-cocos2d-x 从2.2.5升级到3.3的体会

前端之家收集整理的这篇文章主要介绍了quick-cocos2d-x 从2.2.5升级到3.3的体会前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

最近公司的项目需要把项目从quick 2.2.5升级到quick 3.3 final版本,我发现改动还是很大的,但是github上的文档只涵盖了很少的一部分,因此我在这里把自己升级中的一些注意事项罗列出来,希望能有所帮助。

首先,我们可以看看github上的文档,主要有如下部分:

下列函数或常量需要替换:

CCFileUtils:sharedFileUtils()kCCTexture2DPixelFormat_*display.addSpriteFramesWithFileccc3()ccc4()ccc4f()ccc4FFromccc4B()getZOrder()setZOrder()setFlipX()setFlipY()
CCLuaLog() print()
cc.FileUtils:getInstance()
cc.TEXTURE2D_PIXEL_FORMAT_*
display.addSpriteFrames
cc.c3b()
cc.c4b()
cc.c4f()
cc.c4fFromc4b()
getLocalZOrder()
setLocalZOrder()
setFlippedX()
setFlippedY()

结合自己的项目,我们发现还有一些我们在升级时需要注意的东西并没有标注出来。

1.ccp改为cc.p

2.CCDirector等大量CC的写法改为cc.Director,即CCDirector:sharedDirector()改为cc.Director:getInstance(),SimpleAudioEngine:sharedEngine()改为cc.SimpleAudioEngine:getInstance()。

3.骨骼动画写法的修改,如CCArmature:create 改为ccs.Armature:create等

4.骨骼动画的释放,ccs.ArmatureDataManager:purge()改为ccs.ArmatureDataManager:destroyInstance()

5.音乐播放类的带background的方法写法的修改,如isBackgroundMusicPlaying改为isMusicPlaying

6.sprite的点击判断的修改,如下面例子:self.sprite是我们的精灵,pnt是我们的点,那么self.sprite:getBoundingBox():containsPoint(pnt)改为cc.rectContainsPoint(self.sprite:getBoundingBox(),pnt)

7.ui.newBMFontLabel改为cc.ui.UILabel.newBMFontLabel

8.现在的layer层默认是吞噬点击,所以我们在添加新的层的时候,应当设置为不可吞噬,也就是setTouchSwallowEnabled(false)

9.tableview里的写法改变:如kCCScrollViewDirectionVertical改为cc.SCROLLVIEW_DIRECTION_VERTICAL等

10.http请求回调的返回值“inprogress”改为“progress”

11.同时多个assetsmanager同时在下载的过程中,回调的progress值会产生跳动的情况,解决方法是找到asstsmanager.cpp文件修改其中的一个函数的percent前的前缀static,把static去掉并重新编译即可。

12.assetsmanager写法修改,如:

local assetsManager = cc.AssetsManager:new(zipurl,versionurl,path)
assetsManager:deleteVersion()
assetsManager:retain()
assetsManager:setConnectionTimeout(3)

其中retain这句话必不可少,否则会报错。

13.ui.newImageMenuItem改为cc.ui.UIPushButton.new。

14.在quick 3.3中,精灵不可以直接执行cc.PageTurn3D方法,会直接报错,我的解决方法是用cc.NodeGrid:create()创建一个nodegrid,把我们的精灵加在这个nodegrid上,然后在用nodegrid去调用类似PageTurn3D的方法即可。

15.物理引擎相关代码修改,在一开始创建的时候,

local Scene = class("Scene",function()
return display.newPhysicsScene("Scene")
end)

创建长方形的刚体,

local b = cc.PhysicsBody:createBox(cc.size(x,y))

b:getShape(0):setMass() 设置重量
b:getShape(0):setRestitution() 设置弹力
b:setVelocity() 设置速度

如果我们想绑定精灵a到b上,即

a:setPhysicsBody(b)

16.在android上,device.cachePath改为device.writablePath

17.骨骼动画的play()方法去掉,改为playWithIndex

18.在android真机上编译的时候,我们要注意:

这里直接贴上github上的表格,

要启用这个功能,开发者需要打开项目中的proj.android/jni/Application.mk文件,然后将不需要的模块值改为0

MACROCC_USE_CURLCC_USE_TIFFCC_USE_WEBPCC_USE_JPEGCC_USE_PHYSICSCC_USE_3DCC_USE_sqlITECC_USE_CCSTUdioCC_USE_CCBUILDERCC_USE_SPINECC_CODE_IDE_DEBUG_SUPPORT
体积 功能
1.3M 使用 CURL 库提供 HTTP 网络功能关闭后,assetsmanager等相关功能也会被去掉。quick 在 Android 下使用 Android 系统的 Java 接口提供 HTTP 网络功能,所以 CURL 关闭后仍然可以使用HttpRequest。
514KB 使用 TIFF 图像格式。
208KB 使用 WebP 图像格式。
368KB 使用 JPEG 图像格式。
416KB 使用物理引擎。
212KB 使用 3D 模块。
367KB 使用 Lua 的 sqlite 数据库扩展 lsqlite3。
1.2M 使用 Cocos Studio 支持模块。
使用 Cocos Builder 支持模块。
92KB 使用 Spine 支持模块。
使用 cocos IDE 调试支持模块。在 release 版本里自动关闭,因此没有统计它在release版本下的体积。

只需要在Applicaiton.mk中将相应的宏设置为0,然后重新编译就可以得到更小的可执行文件

在proj.android_no_anysdk工程中,以上可选模块均已经关闭。因此如果直接使用no_anysdk工程来编译,生成的apk包将不支持上述模块功能,如需要请自己修改相应的开关。

还有一些常用的基础模块可以去除,由于可能影响常用的功能,请根据自己的情况移除。打开文件 frameworks/runtime-src/Classes/lua_module_register.h ,分别注释掉以下语句:

    register_cocosdenshion_module(L);   // 简单音效模块
    register_network_module(L);         // 网络模块,如 socket 和 websocket
    register_ui_moudle(L);              // 基础UI库,如编辑框等
    register_extension_module(L);       // 基本扩展,如 TableView 等
    register_audioengine_module(L);     // audio engine 模块
这里,如果我们发现编译后的包还是出现找不到sqlite3之类的错误,那么我们可以运行android项目下的clean.bat,然后再重新编译即可。


上面是自己在从quick2.2.5到3.3升级的过程中的一些理解,希望能有所帮助。

原文链接:https://www.f2er.com/cocos2dx/344784.html

猜你在找的Cocos2d-x相关文章