«

关于Lua & Corona的一些tips

时间:2015-12-10     作者:SES雪蓝     分类: 关于LUA的一些事


一些小tips,对工作有可能有些帮助,不定期更新。

------------------------------------------------------------

Corona中,利用display.newGroup()分层,避免object出现层次混乱;注意离开scene的时候销毁。


随机数种子:在要求随机数变化较大的时候,使用

math.randomseed(tonumber(tostring((os.clock()) * 123456789):reverse():sub(1, 8)) or os.time())

代替

math.randomseed(os.time())

会更好。


table注意:Lua中的table功能强大,但是注意遍历整数下标table的时候,pairs 和 ipairs的区别、


防文件复制:给每个文件加上一个额外的字段,储存手机的ID【system.getInfo("deviceID")】(然而苹果不允许……)。

防修改内存:显示和实际存储分开,实际存储为显示数据+一个随机数【还可以分散成多个数,多个数据的和为实际数据】


加入按钮保护机制:点击一个按钮后,需要间隔一段时间才响应,间隔时间一般设置500-1000毫秒最佳。


Corona中,图像、文字的锚点(anchor)默认是(0.5,0.5),但是Group、Container、scrollView这些锚点默认是(0,1)且不可更改……使用时注意。


调用callback的时候,尽量使用pcall();需要发送信息给其他界面的,使用dispatch。


关于优化(做三消项目的时候的经验):

①图像方面,使用texturePacker将小图整合压缩到一张大图上,在Corona中使用imagesheet来正常使用这些图。

②音频方面,android系统下不要使用OpenAL,因为声音会有延迟,这个是android系统的bug(据说android4.1之后修复了这个bug,暂未验证是否还有延迟)

③scene方面:切换scene的时候可以加loading界面,在loading界面进行销毁上一场景、预加载下一场景资源、手动清理垃圾

④使用缓存:图像、只需加载一次的数据等,可使用缓存,但要注意内存使用情况,防止被系统kill

⑤代码优化:

    a)尽量少使用全局变量

    b)在循环次数比较多的循环里将外部的函数赋值给local 来减少系统查询,例如

-- mod_untils.cdiv(a,b) 是计算除法取整的

for i=1, 100000 do
    local res=mod_untils.cdiv(i, 3)
    log.debug(res)
end

-----

local cdiv=mod_untils.cdiv
for i=1, 100000 do
    local res=cdiv(i, 3)
    log.debug(res)
end

--使用下面的效率更高

当需要创建非常多的小size的表时,应预先填充好表的大小,例如:

--预填充(强烈建议)
for i = 1,100000 do
    local a = {0, 0, 0, 0}
    a[1] = 1 + i
    a[2] = 2 + i
    a[3] = 3 + i
    a[4] = 4 + i
end

--非预填充(不建议这样做,尤其是使用次数比较多的时候)
for i = 1,100000 do
    local a = {}
    a[1] = 1 + i
    a[2] = 2 + i
    a[3] = 3 + i
    a[4] = 4 + i
end

关于字符串:长字符串连接时,尽量少使用 .. 连接,推荐使用string.format(),必要时可以使用table来缓存,然后用table.concat获得新的字符串。



评论:
Sadie酱! 2015-12-10 16:38
哈哈哈哈啊哈哈哈哈哈  
阿拉伯加油噻!
commentator
SES雪蓝 2015-12-10 16:45
@Sadie酱!:恩恩 ^_^