关于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获得新的字符串。