深入學習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)
遍歷一個字符串
這裏並沒有每一個都給實例,已經給出模板了,應該自己動手纔好