深入学习Lua
一、函数
函数是划分游戏脚本的主要工具。
函数以function关键字开始,后面是函数名然后是参数列表,end关键字结尾
单一参数的例子
function SetName(myString)
print(" ")
print("Your name is :",myString)
print(" ")
end
"myString"传递给了函数,并在函数中使用,函数中的参数是局部变量,调用结束后被回收
Lua可以定义不定长的参数列表,使用(...)代替参数列表,Lua会创建一个局部的名字为arg的table,保存所有调用时参数,以及参数个数(通过arg.n获取)
function HowMany(...)
...
end
返回值
函数使用return关键字并跟上数值(通常为变量名)来返回结果
function TimesTwo(my)
my = my * 2
return my
end
函数还可以返回多个结果
function ThreeDice()
d1 = math.random(1,6) --取随机数
d2 = math.random(1,6)
d3 = math.random(1,6)
myTotal = d1+d2+d3
return d1,d2,d3,myTotal
end
使用return还可以调用另外一个函数
标准库
assert(myValue)()
assert函数可以像处理函数一样运行编译后的代码块(chunk)
dofile(filename)
dofile载入并立即执行Lua脚本文件,通常用来载入定义的文件以备调用,还可以载入数据文件(如存档)
例:dofile("scripts/function.lua")
数学运算符,Lua提供函数级别的可以调用C标准库的数学运算符。
math.abs |
取绝对值 |
math.max |
一个集合中的“最大值” |
||
math.acos |
反余弦函数 |
math.min |
一个集合中的“最小值” | ||
math.asin |
反正弦函数 |
math.mod |
取模 |
||
math.atan |
反正切函数 | math.pow |
两个参数x,y,求x的y次方 | ||
math.atan2 |
math.rad |
角度转弧度 |
|||
math.ceil |
取不小于函数参数的最小整数值 | math.sin |
正玄 |
||
math.cos |
余玄 |
math.sqrt |
计算平方根 |
||
math.deg |
弧度转角度 |
math.tan |
正切 |
||
math.exp |
计算e的指数次幂。参数为指数 | math.frexp |
指数计算,两个参数,第一参数为底数,第二参数为指数 |
||
math.floor | 向下取整 |
math.ldexp | 指数计算(x*2^y) ,两个参数,第一参数x为,第二参数为指数 | ||
math.log |
计算以e为底的参数x的对数值 |
math.random |
随机生成0~1之间的伪随机数 |
||
math.log10 |
同math.log |
math.randomseed |
设随机数种子 |
||
常用的函数
math.floor()
floor函数用来向下取整(Lua中没有浮点数或者整数的概念),该函数只是舍去小数部分
如:a = 5.125
b = 5.72
print(math.floor(a))
print(math.floor(b))
输出结果都是
5
5
如果想实现四舍五入,那么给a,b都加0.5即可
math.random()
math.random随机生成0~1之间的伪随机数,Lua可以传入最大值和最小值,随机生成这个范围内的数字
如:mfDie = math.random(1,6)
math.min(),math.max()
math.min()确定一个集合中的最大值和最小值
字符处理(字符和数字之间的转换)
类型转换
tonumber()字符转换成数字
tostring()数字转换成字符
string.char(n1,n2...)
根据ASCII编码返回传入参数对应的字符
string.len()
字符串的长度
string.sub(myString,start,end)
返回指定字符(myString)的子串,start指定子串的开始位置,end指定子串的结束位置
myString = "hello world"
newString = string.sub(myString,1,5)
print(newString)
输出结果:hello
string.format()
格式化输出指定字符串
string.find(sourceString,findString)
该函数会在sourceString中产找一个符合findString字符的位置,如果没有找到返回nil
myString = "My name is John Smith."
sStart,sEnd = string.find(myString,"John")
print(sStart,sEnd)
结果:12 15
字符和格式
Lua格式化输出符号
. |
所有字符 |
%a |
字母 |
%c |
控制符 |
%d |
数字 |
%l |
小写字母 |
%p |
标点符号 |
%s |
空额符号 |
%u |
大写字母 |
%w |
字母数字 |
%x |
16进制数 |
%z |
用0表示字符 |
例:
myString = "The price is $17.50."
filter = "$%d%d.%d%d"
filter1 = "%uhe"
print(string.sub(myString,string.find(myString,filter)))
print(string.sub(myString,string.find(myString,filter1)))
输出结果:
17.5
The
string.gsub(sourceString,pattern,replacementString)
sourceString字符串中满足pattern格式的字符都会被替换成replacementString
string.gfind(sourceString,pattern)
遍历一个字符串
这里并没有每一个都给实例,已经给出模板了,应该自己动手才好