遊戲演算法中lua指令碼詳解

2022-08-29 03:48:12 字數 3162 閱讀 8192

此外,函式本身也是乙個變數,比如:

dp@dp:~ % cat test.lua

local mylen={}

mylen.len3=function (x,y,z)

return math.sqrt(x*x+y*y+z*z)

endmylen.len2=function (x,y)

return math.sqrt(x*x+y*y)

endprint(mylen.len2(10,9))

print(mylen.len3(10,9,-9))

dp@dp:~ %

dp@dp:~ % lua test.lua

13.453624047074

16.186414056239

dp@dp:~ %

可以定義閉包,將乙個函式寫在另乙個函式之內,定義在內部的函式可以訪問外部函式的區域性變數,lua中稱之為closure:

dp@dp:~ % cat test1.lua

function mysum(i)

local sums=0

return function()

sums=sums+i

return sums

endend

my_sum=mysum(2)

print(my_sum())

print(my_sum())

print(my_sum())

my_sum=mysum(9)

print(my_sum())

print(my_sum())

print(my_sum())

dp@dp:~ % lua test1.lua24

691827

dp@dp:~ %

可以使用loadfile與dofile將整個lua**做為函式來執行:

> dofile("test1.lua")24

691827

> dofile("test.lua")

13.453624047074

16.186414056239

> myf=loadfile("test.lua")

> myf()

13.453624047

07416.186414056239

也可以通過loadstring定義一段語句

然後將這段語句做為乙個函式執行

> myf=loadstring("x=x*2")

> x=10

> myf()

> print(x)

20> myff=loadstring("x=io.read();x=x+2;print(x)")

> myff()www.tygj123.com

234236

檢查條件,觸發錯誤

dp@dp:~ % cat mysum.lua

mysum=0

while true do

print("請輸入乙個數(輸入0退出計算)")

num=assert(io.read("*number"),"非數字輸入")

print(num)

if num==0 then break end

enddp@dp:~ %

dp@dp:~ % lua mysum.lua

請輸入乙個數(輸入0退出計算)

asdf

lua: mysum.lua:4: 非數字輸入

stack traceback:

[c]: in function 'assert'

mysum.lua:4: in main chunk

[c]: in ?

dp@dp:~ %

或mysum=0

while true do

print("請輸入乙個數(輸入0退出計算)")

num=io.read("*number")

if not num then error("非數字輸入") end

print(num)

if num==0 then break end

end執行後,輸入非數字會觸發錯誤而退出

dp@dp:~ % lua mysum1.lua

請輸入乙個數(輸入0退出計算)

1342

1342

請輸入乙個數(輸入0退出計算)

asflua: mynum1.lua:5: 非數字輸入

stack traceback:

[c]: in function 'error'

mynum1.lua:5: in main chunk

[c]: in ?

dp@dp:~ %

也可使用pcall呼叫可能發生錯誤的函式,然後進一步處理錯誤

my_sum=0www.yztrans.com

function mysum()

while true do

print("請輸入乙個數(輸入0退出計算)")

num=io.read("*number")

if not num then error("非數字輸入") end

if num==0 then break end

my_sum=my_sum+num

endend

if pcall(mysum) then

print("計算完畢,累加結果:"..my_sum)

else

print("只能輸入數字,程式異常退出!")

print("累加結果:"..my_sum)

enddp@dp:~ % lua mysum.lua

請輸入乙個數(輸入0退出計算)

234請輸入乙個數(輸入0退出計算)

-324

請輸入乙個數(輸入0退出計算)

88請輸入乙個數(輸入0退出計算)

123請輸入乙個數(輸入0退出計算)

0計算完畢,累加結果:121

dp@dp:~ % lua mysum.lua

請輸入乙個數(輸入0退出計算)

234請輸入乙個數(輸入0退出計算)

-11請輸入乙個數(輸入0退出計算)

233請輸入乙個數(輸入0退出計算)

88請輸入乙個數(輸入0退出計算)

asdf

只能輸入數字,程式異常退出!

累加結果:544

Lua遊戲指令碼語言入門(一)

lua 的語法比較簡單,學習起來也比較省力,但功能卻並不弱。在lua中,一切都是變數,除了關鍵字。請記住這句話。前言.開發環境搭建 lua執行器 i.首先是注釋 寫乙個程式,總是少不了注釋的。在lua中,你可以使用單行注釋和多行注釋。單行注釋中,連續兩個減號 表示注釋的開始,一直延續到行末為止。相當...

Unity中預覽lua指令碼

unity中選中指令碼後,右側的inspector可以看到指令碼的文字資訊,但是lua作為一種文字卻並不能被unity識別從而產生預覽效果,如圖 c 指令碼預覽效果 lua指令碼預覽效果 此時要想產生類似的效果,需要自己手動編寫 來實現,很簡單,直接上 using unityengine using...

Redis中快取Lua 指令碼

為什麼要快取 在指令碼比較長的情況下,如果每次呼叫指令碼都需要把整個指令碼傳給redis 服務端,會產生比較大的網路開銷。為了解決這個問題,redis 提供了evalsha 命令,允許開發者通過指令碼內容的sha1 摘要來執行指令碼。如何快取 redis 在執行script load 命令時會計算指...