本文是根据lua游戏开发实践指南做的一些学习笔记,仅用于继续自己学习的一些知识。
Lua基础
1、 语言定义:
在lua语言中,标识符有很大的灵活性(变量和函数名),不过用户不呢个以数字作为起始符,也要避免下划线(_)接大写字母,因为这种格式为lua自身保留如_Start。
建议用户使用如下格式和命名规则来定义变量、常量和函数名:
① 常量用全大写和下划线,例如:MY_CONSTANT
② 变量第一个字母小写,例如:myVariable
③ 全角变量第一个字母用小写g表示,例如:gMyGlobal
④ 函数名第一个字母大写,例如:functionMyFunction()
在lua中,用户可以在一段文字前家两个(--)来标记该行行为注释,还可以使用块注释,参考下面的实例:
--this is acomment in lua that is on its own line
myValue = 7 --you can also add a comment to a line of script
2、 变量:
在lua中,变量不需要在使用前声明,这个稍微有点争议。因为不需要声明,所以可以在任何地方引入需要的变量。创建、分类和给变量赋值可以参照如下代码:
myValue = 7;
这段代码中创建了一个名为myValue的变量,并给它赋值为数字7.可以使用type函数来判断变量的类型。在Lua中有五种变量类型分别是:nil、Boolean、string、Number和table.
Nil是一个简单类型,用来表示这个变量还没有被赋值(参考下例),如果给一个变量赋值为nil,那么实际上表示删除该变量的意思。
myValue =nil—this deletes the variable
local myValue – this creates a local variable with aninitial nil value
Boolean 类型的变量只有两种值:true和false。Boolean变量在条件表示中常用,参考下面的例子:
MyValue true – creates a Boolean variable with a value oftrue
String 类型在lua中相对比较简单,lua字符串可以小道一个字符,也可以包含百万字符以上。
Number在lua中是双精度浮点数。Lua没有整数(由于小于1w14的数值不存在取整误差,所以不需要整数类型),数字可以用下列方式表达:
myNumber =7
myNumber = 0.756
table在lua中最强大也是最容易造成困扰的数据类型,我们可以把它当作数组来使用。
在控制台测试如下代码:
Ready>myTable = {2,4,6,8,10}
Ready>print(myTable[3])
6
在例子中,table相关的函数看起来就像保存许多变量的数组。我们使用中括号和索引来获取table中的值。
3、 局部变量和全局变量
Lua变量默认是全局的,也就是说,变量的值在整个会话中保持不变,除非脚本改变它。当使用全局变量时,变量名前面加一个g字母,定义局部变量可以给它设定一个初值,也可以不用,参考下面的示例:
Function MyFunction()
Local myX = 7
If myX<10 then
Local myY = “hello world”
End
Print(myY);
End
4、 运算符
运算符是特殊的符号,可以让两个值得到运算结果。算数运算符可以得到出计算结果,关系运算符得到Boolean的结果。
算数运算符,Lua 支持下列标准的算数运算符:
加,例如:a+b=c;
剪,例如:a-b=c
乘,例如:a*b=c
除,例如:a/b =c
关系运算符
用户可以试用下列标准的关系运算符比较值或者表达式:
If a==b then
Prinf(“a is equal to b”)
End
If a-=b then
Print(“a is not equal to b”)
End
If a <b then
Print(“a is less than b”)
End
If a >b then
Prin(“a is greater than b”)
End
逻辑运算符
逻辑运算符测试两个参数并返回相互关联的结果。在lua中,逻辑运算符使用小写字母。
And运算符比较两个参数,如果一个参数是false,则返回false;否则返回第一个参数的值。
a = 5
b = 10
c = 20
if (a < 10)and (b<20) then
print(“this returns true”)
end
if (a>c)and(b<c) then
print(“this returns false”)
end
5、 控制结构
Lua包含了一小部分重要的控制结构,可以让用户在脚本中有充分的选择自由。所有的控制结构都可以用以end作为结束标记。
If语句很常见,如果用户熟悉其他编程语言或者脚本语言,肯定见多很多次。If语言可以判断一个参数,如果是true的话,那么程序块就会被执行。例如:
myValue = 7;
if myValue <10 then
print(“myValue is less than ten”)
end
if (myValue >5)and(myValue<10)then
print(“myValue is between five andten”)
end
我们还可以使用else和另外一耳光程序块来扩展if语句的功能。如果if语句得到false的结果,那么被else-end括起来的程序块将被执行。例如:
myValue =20
if myValue == 21 then
print(“the Value is 21”)
else
print(“the value is not 21”)
end
此外,用户还可以使用elseif 关键字来添加一系列的条件式。在AI脚本中,这个关键字非诚的有用,因为Lua不支持case句式。例如:
myValue =17
if myValue<6 then
print(“myValue is between zero andfive”)
elseif myValue<11 then
print(“myValue is between six andten”)
elseif myValue <16 then
print(“myValue is between elevenand twenty”)
elseif myValue <21the
print(“myValue is between sixteenand twenty”)
else
prin(“myValue is greater thantwenty”)
end
while 和repeat
while 和repeat控制结构非常相似,它们都可以循环执行一段脚本知道满足某个条件。While控制结构首先判断一个参数,如果条件式true,那么程序块会被执行(也有可能永远不被执行)。Repeat控制结构则是在最后判断参数,这就保证该程序块至少被执行一次。
While控制结构使用do关键字,和if控制结构的then关键字一样,用来标记有条件的程序块的开始,参考下面示例:
Index =1
While index<10 do
Prinf(“loop pass :”,index)
Index = index+1
End
For控制结构
Lua提供两种for控制结构(数字型和通用型),这里我们先解释数字型控制结构,for控制结构可以让用户根据表达式的值有限次地执行一段脚本,例如:
for index =1,10 do
print(index)
end
在for关键字之后,需要提供变量的范围,遍历这个范围内的每一个值的同时,程序块会被执行。Do关键字标记程序块的开始,end标记程序块的结束。
用户可以在第三个参数中定义”step”的值。例如:
for index = 10,1,-1 do
print(index)
end
for index =1,100,2 do
print(index)
end
在使用for控制结构时,用户需要注意一下几点。首先,循环次数只是第一次执行的时候确定,因此,就算用户更改了参数的值元不会影响最终循环的次数。其次,循环结构中的变量是局部变量,一旦循环结束就会被清楚。如果想保存他们的值,那么必须使用全局变量或者更高级别的局部变量。
break控制结构
break语句可以从循环控制结构中强制退出。用户不能再循环外使用它,而且它必须在程序块的最后(通常是if-then语句)。参考下面示例:
for index =1,100 do
if index ==52 then
print(“52--ouch”)
break
end
print(“the value is”,index’)
end
print(“this is the that will be executed after the break”)