Lua筆記 I

Lua的logo

先廢話一下

說到遊戲製作,基本上就一定會聽到 Lua 這個程式語言,不過有鑑於繁體中文的相關資料實在不多,不如就讓我在這理記錄下個人的學習過程,順便和碰巧看見這些文章的人分享,因爲身邊目前沒有人可以直接指導,如果高人們發現文章內有錯誤,也請不要客氣用力指出,感激!!

本人的Lua學習,目前是參考Fabio Mascarenhas教授的上課簡報爲主,網路資料查詢爲輔,今後的筆記也會按照該教授授課簡報的順序來記錄

Fabio Mascarenhas教授的授課網站: Link(裏面還有一些題目可以自我練習)
然後這次的筆記範圍對應到教授Getting Started的投影片

關於Lua的優點,歷史故事本人就跳過了,因爲我也還不知道Lua哪裏厲害
先學再說

I.環境架設

要使用Lua,首先必須擁有Lua的執行環境,操作可以參考官方說明
在Linux debian環境底下,可以使用套件管理員,synaptic套件管理程式,或是使用下面的指令來安裝
(windows和XOS請參照官方說明安裝: Link)

//Lua版本依照當時的最新版決定
sudo apt-get install lua5.X

要確認是否成功安裝,請在終端機內輸入lua -v,顯示版本便是安裝完成

II.正式開始Lua

一般來說,爲了即時以及方便測試Lua的功能,我們會先在 REPL(real-eval-print-loop) 裏面測試我們撰寫的Lua程式,在終端機下輸入lua,就會進入REPL

然後就可以開始試試Lua的一些功能了,下面我使用一邊操作一邊講解的方式來進行

  • 輸出

lua的輸出函式如下

>print( "hello world!" )
--或者是

--[[輸入
下面的指令]]--

>print( 'hello again, world!' )

這個範例裏有幾個重點

  1. Lua在選取字串時可以使用雙分號(“)或是單分號(‘),功能並無差異
  2. Lua的單行標註使用兩個減號(-),多行標註則是(--[ Comment here ]--)的形式
  3. Lua函數的形式類似C/C++,prototype都是 回傳值 函數名稱 (輸入數值),比較有趣的是 Lua的回傳值可以有一個以上,這個特性以後會在遇上

另外,還可以試試看下面的指令

--簡單的數字運算

>print( 1 + 2 )

--複雜一些的三角函數

>print( math.sin( math.pi / 3 ) )

這裏,我們遇上了math這個Lua內建的函式庫,Lua還有許多函式庫,很快就會遇上
函式庫的呼叫方法像上面一樣,是 函式庫名稱.函式名稱()

  • 變數

Lua有各種的變數形態,這裏先不多談,我們將重點著重在宣告上
Lua的變數宣告很容易,不需要指定變數的形態,請看以下的例子

>a = 10
>b = 3
>print( a + b )
>print( a, b )

這裏就開始有趣起來了,注意到最後一個print( a, b )嗎?輸入後會得到下面的回覆

10  3

這就是Lua的多個回傳值特性

  • 函式

一般來說,我們會把需要使用的Lua資料寫成文字資料,這裏我們先創建一份新的文件,內容如下

File name:test.lua
function add ( a, b )
    return a + b
end

文字檔案儲存後,再次開啓REPL,然後使用loadfile()把檔案讀入REPL中,像下面

>loadfile( "FILE PATH" )    --FILE PATH放入剛剛文件的位置

>print( add( 11, 22 ) )

沒有意外的話,我們會得到33的回傳值,這裏來解說一下Lua的函式結構
在Lua中函式的宣告原型: function 函式名稱 ( 參數1, 參數2 ... )
接着就可以在裏面進行需要的運算,最後再把數值 return 回去,如果要回傳一個以上的資料,則將資料以分號(,)分開
然後輸入end,告訴Lua這個函式到此結束

這裏隱含了一個相當重要的概念, Chunk(塊)
一個Lua的文件是一個chunk,一個函式是一個chunk,一個函式裏面的while迴圈也是一個chunk
這會牽扯到 變數有效範圍 的課題,我們會在後面的部分正式討論

III.總結

這裏我們學到了:
1.如何架設環境
2.Lua的基本文字輸出,以及文字可以使用“或是'來標記
3.math函式庫( 還記得math.sin嗎?)
4.變數的宣告
5.函式的宣告
6.Lua複數回傳值的特性

註:如果有錯誤,歡迎留言告知,或是寄送email給我,感激

Comments

comments powered by Disqus