深入学习Lua

一、函数

函数是划分游戏脚本的主要工具。

函数以function关键字开始,后面是函数名然后是参数列表,end关键字结尾

《Lua游戏开发实践指南》学习笔记2_Lua

单一参数的例子

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)

遍历一个字符串

这里并没有每一个都给实例,已经给出模板了,应该自己动手才好