本篇博客介绍Lua的库函数,先从数学库开始,程序代码列举了几个数学库函数的用法,更多的用法可以查阅手册。

--数学库
--三角函数库(sin, cos, tan, asin, acos,所有的三角函数都在弧度单位下工作,这个要和cocos区分开来,cocos涉及到度数的函数使用的是度数而不是弧度,所以记得转换啊,如何转化,下面有。
print(math.sin(math.pi/2)) -->1
print(math.cos(math.pi)) --> -1
--幂指函数(exp, log, log10)
print(math.log10(10)) -->1
--max、min,加上一个变量pi。数学库也定义了一个幂操作符(^)。
print(math.max(1,4,6)) --> 6
local i,j = -3,-5
print(math.min(i,j)) --> -5
print(2^3) -->8
--所有的三角函数都在弧度单位下工作,你可以使用deg和rad函数在度和弧度之间转换
print(math.deg(math.pi/2)) --> 90
print(math.rad(180)) -->3.14...
--舍入函数(floor, ceil)
--floor   不大于x的最大整数
print(math.floor(2.2) ) -->2
--ceil    不小于x的最小整数
print(math.ceil(2.2)) -->3

比较实用的是随机数,游戏中经常用到,为了得到真正的随机数需要先设置一下随机数种子,然后调用随机数获取函数。

--获取随机数方法如下
--randomseed
--设置随机数种子 在程序启动时,会用一个固定的种子数来调用它,所以在你使用之前先设置一下不同的种子,
--防止每次生成的随机序列相同,time函数是系统库os中的一个函数。
math.randomseed(os.time())
--random  获取随机数
print(math.random()) --不带参数,将产生 [0,1)范围内的随机数
print(math.random(10)) --带一个参数n,将产生1 <= x <= n范围内的随机数x.
print(math.random(2,5)) --带两个参数a和b,将产生a <= x <= b范围内的随机数x.

Lua数学库与随机数

以下列举了Table库的几个标准库函数,table的插入和删除函数可以用来实现一些基本的数据结构,用起来比较方便。还有排序函数sort,和其他语言的排序函数类似,具体用法看代码。

--table库
local arr = {1,2,nil,3,4}

--用迭代器ipairs()进行变量得到结果是 1,2,如果用pairs()变量得到的结果是1,2,3,4
for _,v in ipairs(arr) do
    print(v)
end

print(table.getn(arr)) -->5 nil对应的健不为空

local a = {}
a[1]="123"
a[5]="234"
--以下是三种获取arr大小的方法
print(#a) --> 1
print(table.getn(a)) -->1
print(table.maxn(a)) -->5
--使用getn还是maxn看你自己的需求了。
local function printArr(t1)
    for _,v in pairs(t1) do
        io.write(v .. "\t")
    end
    print("\n")
end
--使用io.write打印不会加换行符
--插入元素
--table.insert函数在array指定位置插入一个元素,并将后面所有其他的元素后移。
local t1 = {10,34,54}
table.insert(t1,2,20)
printArr(t1) -- 10 20 34 54
--经常使用的一个特殊情况是,我们不带位置参数调用insert,将会在array最后位置插入元素(所以不需要元素移动)。
table.insert(t1,100)
printArr(t1) -- 10 20 34 54 100

--删除元素
--table.remove函数删除数组中指定位置的元素,并返回这个元素,所有后面的元素前移,并且数组的大小改变。
--不带位置参数调用的时候,他删除array的最后一个元素。
print(table.remove(t1,1)) -- 10
print(table.remove(t1)) -- 100
printArr(t1) -- 20 34 54

--连接
local t2 = {1,2,3,4,5,6,7}
--table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素,
--元素间以指定的分隔符隔开。除了table外, 其他的参数都不是必须的, 分隔符的默认值是空字符,
--start的默认值是1, end的默认值是数组部分的总长.
print(table.concat(t2,"---",1,4))
-- 1---2---3---4

--排序
--sort()函数对给定的table进行升序排序
local t3 = {34,21,56,76,3,2,1}
table.sort(t3)
printArr(t3)
--可以给sort传入一个比较函数,此函数应满足以下条件: 接受两个参数(依次为a, b), 并返回一个布尔型的值,
--当a应该排在b前面时, 返回true, 反之返回false.
local function cmp(a,b)
	return a>b
end
table.sort(t3,cmp)
printArr(t3)

接下来是Lua的系统库,主要是日期和时间。

--时间和日期
--函数time在没有参数时返回当前时钟的数值。(在许多系统中该数值是当前距离某个特定时间的秒数。)
--获取当前的时间戳,单位是秒
print(os.time())

--函数data,不管它的名字是什么,其实是time函数的一种“反函数”。它将一个表示日期和时间的数值,
--转换成更高级的表现形式。其第一个参数是一个格式化字符串,描述了要返回的时间形式。第二个参数就是时间的数字表示,默认为当前的时间。
--使用格式字符 "*t",创建一个时间表。
local tm = os.date("*t")
print(tm.year.."."..tm.month.."."..tm.day.." "..tm.hour..":"..tm.min..":"..tm.sec)

print(os.date("today is %A, in %B"))
print(os.date("%x"))

--date没有参数的时候是以%c的格式输出
print(os.date())

--函数os.clock返回执行该程序CPU花去的时钟秒数。该函数常用来测试一段代码
local x = os.clock()
local s = 0
for i=1,100000 do s = s + i end
print(string.format("elapsed time: %.2f\n", os.clock() - x))

lua日期和时间

以下是date函数的其他格式字符。

lua日期和时间