lua的一些程序片段

来源:互联网 发布:淘宝售假扣24分影响 编辑:程序博客网 时间:2024/05/16 04:42

    在游戏过程中,很多时候会用一些基础的函数,我把一些自己常用的lua函数拿出来跟大家分享,相信很多函数在大家的游戏开发过程中,也是经常用到的。如果你有好的函数片段,欢迎分享哈。

luaBase = {}-------------------------------------------------------------------------------------------- 获取两个数相除结果的整数部分-- getInt(1.2) ==> 1function luaBase.getInt(a)return (math.modf(a))end-------------------------------------------------------------------------------------------- 对两数相除结果四舍五入-- getRounding(1.5) ==> 2-- getRounding(1.4) ==> 1function luaBase.getRounding(a)local r1, r2 = math.modf(a, 1)r2 = r2 >= 0.5 and 1 or 0return r1 + r2end-------------------------------------------------------------------------------------------- 返回两个数相除结果的整数值和求余值-- getDivMod(76, 5) ==> 15, 1function luaBase.getDivMod(data, division)if division == 0 thenreturn nilendlocal a = luaBase.getInt(data / division)local b = data % divisionreturn a, bend-------------------------------------------------------------------------------------------- 获取参数列表的第n个参数--[[function fun()return 10, 20, 30, 40, 50endgetAt(3, fun()) ==> 30]]--function luaBase.getAt(index, ...)return arg[index]end-------------------------------------------------------------------------------------------- 按参数要求分解一个数据--[[data = abbcccdddda1, a2, a3, a4 = analysisData(data, 1, 2, 3, 4)a1, a2, a3, a4 ==> a, bb, ccc, dddddata = aaabcca1, a2, a3, a4 = analysisData(data, 3, 1, 2)a1, a2, a3, a4 ==> aaa, b, cc]]--function luaBase.analysisData(data, ...)local tblRet = {}local strData = tostring(data)for i = 1, table.getn(arg) dotable.insert(tblRet, string.sub(strData, 1, arg[i]))if string.len(strData) ~= arg[i] thenstrData = string.sub(strData, arg[i] + 1, string.len(strData))endendreturn unpack(tblRet)end-------------------------------------------------------------------------------------------- 取a的二进制位index的值-- index 从右到左,从0开始-- getBit(17, 4) ==> 1-- 17 = 10001function luaBase.getBit(a, index)local b = luaBase.getInt(a / math.pow(2, index))return b % 2end-------------------------------------------------------------------------------------------- 设置a的二进制位index的值-- index 从右到左,从0开始-- setBit(17, 2) ==> 10101 = 21-- setBit(17, 0) ==> 10001 = 17-- 17 = 10001function luaBase.setBit(a, index)local b = luaBase.getInt(a / math.pow(2, index))if b % 2 == 1 thenreturn aelsereturn a + math.pow(2, index)endend-------------------------------------------------------------------------------------------- 清除a的二进制位index的值-- index 从右到左,从0开始-- clearBit(17, 2) ==> 10001 = 17-- clearBit(17, 0) ==> 10000 = 16-- 17 = 10001function luaBase.clearBit(a, index)local b = luaBase.getInt(a / math.pow(2, index))if b % 2 == 0 thenreturn aelsereturn a - math.pow(2, index)endend


 

啊,原来CSDN不支持lua基础类型高亮,好吧,大家将就下吧。拷贝到SciTE就容易看了。

来解释下为什么要加入luaBase = {}。

1、在游戏开发过程中,lua文件实在太多了,100个左右,很多时候,函数名可能跟别的文件的函数名相同了,这时候,调用的函数时看谁先被加载,这样很容易就出现了BUG,所以加入了luaBase ={}。

2、首先这个就解决了函数重名的问题,其次,这个luaBase的名字是跟保存的文件名一样的,这样做是为了方便找到一个函数的原型,在别的文件中,很容易就知道这个函数的来源是哪个文件。