lua遊戲開發實踐指南學習筆記1,lua學習筆記
本文是根據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”)
lua遊戲開發實踐指南 怎
是書都可以看看 有些有PDF 的 可以先找找看
Lua遊戲開發實踐指南 源碼
Lua僅僅是一個擴充指令碼語言,不同的遊戲,對Lua的整合是完全不同的。
比如,一個對魔獸世界的Lua指令碼外掛程式很熟悉的人,你讓他去搞另一款遊戲的Lua指令碼,他必須得重來,他先前的經驗不太管用。
所以,不存在通用的Lua遊戲開發實踐,關鍵還是學習Lua本身。
Lua學了後,你對哪個遊戲感興趣,就去研讀這個遊戲對Lua的整合文檔,看遊戲給你提供了些什麼介面。