最近公司的项目需要把项目从quick 2.2.5升级到quick 3.3 final版本,我发现改动还是很大的,但是github上的文档只涵盖了很少的一部分,因此我在这里把自己升级中的一些注意事项罗列出来,希望能有所帮助。
首先,我们可以看看github上的文档,主要有如下部分:
下列函数或常量需要替换:
CCLuaLog() | print() |
CCFileUtils:sharedFileUtils() | cc.FileUtils:getInstance() |
kCCTexture2DPixelFormat_* | cc.TEXTURE2D_PIXEL_FORMAT_* |
display.addSpriteFramesWithFile | display.addSpriteFrames |
ccc3() | cc.c3b() |
ccc4() | cc.c4b() |
ccc4f() | cc.c4f() |
ccc4FFromccc4B() | cc.c4fFromc4b() |
getZOrder() | getLocalZOrder() |
setZOrder() | setLocalZOrder() |
setFlipX() | setFlippedX() |
setFlipY() | 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。
MACRO 体积 功能CC_USE_CURL | 1.3M | 使用 CURL 库提供 HTTP 网络功能。关闭后,assetsmanager等相关功能也会被去掉。quick 在 Android 下使用 Android 系统的 Java 接口提供 HTTP 网络功能,所以 CURL 关闭后仍然可以使用HttpRequest。 |
CC_USE_TIFF | 514KB | 使用 TIFF 图像格式。 |
CC_USE_WEBP | 208KB | 使用 WebP 图像格式。 |
CC_USE_JPEG | 368KB | 使用 JPEG 图像格式。 |
CC_USE_PHYSICS | 416KB | 使用物理引擎。 |
CC_USE_3D | 212KB | 使用 3D 模块。 |
CC_USE_SQLITE | 367KB | 使用 Lua 的 Sqlite 数据库扩展 lsqlite3。 |
CC_USE_CCSTUDIO | 1.2M | 使用 Cocos Studio 支持模块。 |
CC_USE_CCBUILDER | 208KB | 使用 Cocos Builder 支持模块。 |
CC_USE_SPINE | 92KB | 使用 Spine 支持模块。 |
CC_CODE_IDE_DEBUG_SUPPORT | 使用 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 模块
上面是自己在从quick2.2.5到3.3升级的过程中的一些理解,希望能有所帮助。