本文是根據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”)