深入学习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)
遍历一个字符串
这里并没有每一个都给实例,已经给出模板了,应该自己动手才好