自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Lua游戲腳本語(yǔ)言入門(mén)學(xué)習(xí)指導(dǎo)

移動(dòng)開(kāi)發(fā) iOS
Lua游戲腳本語(yǔ)言入門(mén)學(xué)習(xí)是本文要介紹的內(nèi)容,在這篇文章中,我想向大家介紹如何進(jìn)行Lua程序設(shè)計(jì),具體內(nèi)容來(lái)看本文詳解。

Lua游戲腳本語(yǔ)言入門(mén)學(xué)習(xí)是本文要介紹的內(nèi)容,在這篇文章中,我想向大家介紹如何進(jìn)行Lua程序設(shè)計(jì)。我假設(shè)大家都學(xué)過(guò)至少一門(mén)編程語(yǔ)言,比如Basic或C,特別是C。因?yàn)?strong>Lua的最大用途是在宿主程序中作為腳本使用的。

Lua 的語(yǔ)法比較簡(jiǎn)單,學(xué)習(xí)起來(lái)也比較省力,但功能卻并不弱。在Lua中,一切都是變量,除了關(guān)鍵字。請(qǐng)記住這句話。

1、首先是注釋

寫(xiě)一個(gè)程序,總是少不了注釋的。在Lua中,你可以使用單行注釋和多行注釋。單行注釋中,連續(xù)兩個(gè)減號(hào)""表示注釋的開(kāi)始,一直延續(xù)到行末為止。相當(dāng)于C++語(yǔ)言中的"//"。多行注釋中,由"[["表示注釋開(kāi)始,并且一直延續(xù)到"]]"為止。這種注釋相當(dāng)于C語(yǔ)言中的"/*…*/"。在注釋當(dāng)中,"[["和"]]"是可以嵌套的。

2、Lua編程

經(jīng)典的"Hello world"的程序總是被用來(lái)開(kāi)始介紹一種語(yǔ)言。在Lua中,寫(xiě)一個(gè)這樣的程序很簡(jiǎn)單:

  1. print("Hello world") 

在Lua中,語(yǔ)句之間可以用分號(hào)";"隔開(kāi),也可以用空白隔開(kāi)。一般來(lái)說(shuō),如果多個(gè)語(yǔ)句寫(xiě)在同一行的話,建議總是用分號(hào)隔開(kāi)。

Lua 有好幾種程序控制語(yǔ)句,如:

條件控制:if 條件 then … elseif 條件 then … else … end

While循環(huán):while 條件 do … end

Repeat循環(huán):repeat … until 條件

For循環(huán):for 變量 = 初值,終點(diǎn)值,步進(jìn) do … end

For循環(huán):for 變量1,變量2,… ,變量N in表或枚舉函數(shù) do … end

注意一下,for的循環(huán)變量總是只作用于for的局部變量,你也可以省略步進(jìn)值,這時(shí)候,for循環(huán)會(huì)使用1作為步進(jìn)值。你可以用break來(lái)中止一個(gè)循環(huán)。如果你有程序設(shè)計(jì)的基礎(chǔ),比如你學(xué)過(guò)Basic,C之類的,你會(huì)覺(jué)得Lua也不難。但Lua有幾個(gè)地方是明顯不同于這些程序設(shè)計(jì)語(yǔ)言的,所以請(qǐng)?zhí)貏e注意。

.語(yǔ)句塊

語(yǔ)句塊在C++中是用"{"和"}"括起來(lái)的,在Lua中,它是用do 和 end 括起來(lái)的。比如:

  1. do print("Hello") end 

你可以在 函數(shù) 中和 語(yǔ)句塊 中定局部變量。

.賦值語(yǔ)句

賦值語(yǔ)句在Lua被強(qiáng)化了。它可以同時(shí)給多個(gè)變量賦值。

例如:

  1. a,b,c,d=1,2,3,4 

甚至是:

a,b=b,a 多么方便的交換變量功能啊。

在默認(rèn)情況下,變量總是認(rèn)為是全局的。假如你要定義局部變量,則在第一次賦值的時(shí)候,需要用local說(shuō)明。比如:

  1. local a,b,c = 1,2,3 a,b,c都是局部變量 

.?dāng)?shù)值運(yùn)算

和C語(yǔ)言一樣,支持 +, -, *, /。但Lua還多了一個(gè)"^"。這表示指數(shù)乘方運(yùn)算。比如2^3 結(jié)果為8, 2^4結(jié)果為16。

連接兩個(gè)字符串,可以用".."運(yùn)處符。如:

  1. "This a " .. "string." 等于 "this a string" 

.比較運(yùn)算

  1. < > <>= == ~= 

分別表示 小于,大于,不大于,不小于,相等,不相等

所有這些操作符總是返回true或false。

對(duì)于Table,F(xiàn)unction和Userdata類型的數(shù)據(jù),只有 == 和 ~=可以用。相等表示兩個(gè)變量引用的是同一個(gè)數(shù)據(jù)。比如:

  1. a={1,2}  
  2. b=a 
  3. print(a==b, a~=b) true, false  
  4. a={1,2}  
  5. b={1,2}  
  6. print(a==b, a~=b) false, true 

.邏輯運(yùn)算

  1. and, or, not 

其中,and 和 or 與C語(yǔ)言區(qū)別特別大。

在這里,請(qǐng)先記住,在Lua中,只有false和nil才計(jì)算為false,其它任何數(shù)據(jù)都計(jì)算為true,0也是true!

and 和 or的運(yùn)算結(jié)果不是true和false,而是和它的兩個(gè)操作數(shù)相關(guān)。

a and b:如果a為false,則返回a;否則返回b

a or b:如果 a 為true,則返回a;否則返回b

舉幾個(gè)例子:

  1. print(4 and 5) > 5  
  2. print(nil and 13) > nil  
  3. print(false and 13) > false  
  4. print(4 or 5) > 4  
  5. print(false or 5) > 5 

在Lua中這是很有用的特性,也是比較令人混洧的特性。

我們可以模擬C語(yǔ)言中的語(yǔ)句:x = a? b : c,在Lua中,可以寫(xiě)成:x = a and b or c。

最有用的語(yǔ)句是: x = x or v,它相當(dāng)于:if not x then x = v end 。

.運(yùn)算符優(yōu)先級(jí),從高到低順序如下:

  1. ^  
  2. not - (一元運(yùn)算)  
  3.  * /  
  4.  + -  
  5.  ..(字符串連接)  
  6.  < > <>= ~= ==  
  7.  and  
  8.  or 

3、關(guān)鍵字

關(guān)鍵字是不能做為變量的。Lua的關(guān)鍵字不多,就以下幾個(gè):

  1. and break do else elseif  
  2. end false for function if  
  3. in local nil not or  
  4. repeat return then true until while 

4、變量類型

怎么確定一個(gè)變量是什么類型的呢?大家可以用type()函數(shù)來(lái)檢查。Lua支持的類型有以下幾種:

Nil 空值,所有沒(méi)有使用過(guò)的變量,都是nil。nil既是值,又是類型。

Boolean 布爾值

Number 數(shù)值,在Lua里,數(shù)值相當(dāng)于C語(yǔ)言的double

String 字符串,如果你愿意的話,字符串是可以包含'\0'字符的

Table 關(guān)系表類型,這個(gè)類型功能比較強(qiáng)大,我們?cè)诤竺媛f(shuō)。

Function 函數(shù)類型,不要懷疑,函數(shù)也是一種類型,也就是說(shuō),所有的函數(shù),它本身就是一個(gè)變量。

Userdata 嗯,這個(gè)類型專門(mén)用來(lái)和Lua的宿主打交道的。宿主通常是用C和C++來(lái)編寫(xiě)的,在這種情況下,Userdata可以是宿主的任意數(shù)據(jù)類型,常用的有Struct和指針。

Thread 線程類型,在Lua中沒(méi)有真正的線程。Lua中可以將一個(gè)函數(shù)分成幾部份運(yùn)行。如果感興趣的話,可以去看看Lua的文檔。

5、變量的定義

所有的語(yǔ)言,都要用到變量。在Lua中,不管你在什么地方使用變量,都不需要聲明,并且所有的這些變量總是全局變量,除非,你在前面加上"local"。這一點(diǎn)要特別注意,因?yàn)槟憧赡芟朐诤瘮?shù)里使用局部變量,卻忘了用local來(lái)說(shuō)明。至于變量名字,它是大小寫(xiě)相關(guān)的。也就是說(shuō),A和a是兩個(gè)不同的變量。定義一個(gè)變量的方法就是賦值。"="操作就是用來(lái)賦值的我們一起來(lái)定義幾種常用類型的變量吧。

(1)Nil

正如前面所說(shuō)的,沒(méi)有使用過(guò)的變量的值,都是Nil。有時(shí)候我們也需要將一個(gè)變量清除,這時(shí)候,我們可以直接給變量賦以nil值。如:

var1=nil 請(qǐng)注意 nil 一定要小寫(xiě)

(2)Boolean

布爾值通常是用在進(jìn)行條件判斷的時(shí)候。布爾值有兩種:true 和 false。在Lua中,只有false和nil才被計(jì)算為false,而所有任何其它類型的值,都是true。比如0,空串等等,都是true。不要被C語(yǔ)言的習(xí)慣所誤導(dǎo),0在Lua中的的確確是true。你也可以直接給一個(gè)變量賦以Boolean類型的值,如:

  1. varboolean = true 

(3)Number

在Lua中,是沒(méi)有整數(shù)類型的,也不需要。一般情況下,只要數(shù)值不是很大(比如不超過(guò)100,000,000,000,000),是不會(huì)產(chǎn)生舍入誤差的。在很多CPU上,實(shí)數(shù)的運(yùn)算并不比整數(shù)慢。

實(shí)數(shù)的表示方法,同C語(yǔ)言類似,如:

  1. 4 0.4 4.57e-3 0.3e12 5e+20 

(4)String

字符串,總是一種非常常用的高級(jí)類型。在Lua中,你可以非常方便的定義很長(zhǎng)很長(zhǎng)的字符串。字符串在Lua中有幾種方法來(lái)表示,最通用的方法,是用雙引號(hào)或單引號(hào)來(lái)括起一個(gè)字符串的,如:

  1. "This is a string." 

和C語(yǔ)言相同的,它支持一些轉(zhuǎn)義字符,列表如下:

  1. \a bell  
  2. \b back space  
  3. \f form feed  
  4. \n newline  
  5. \r carriage return  
  6. \t horizontal tab  
  7. \v vertical tab  
  8. \\ backslash  
  9. \" double quote  
  10. \' single quote  
  11. \[ left square bracket  
  12. \] right square bracket 

由于這種字符串只能寫(xiě)在一行中,因此,不可避免的要用到轉(zhuǎn)義字符。加入了轉(zhuǎn)義字符的串,看起來(lái)實(shí)在是不敢恭維,比如:

  1. "one line\nnext line\n\"in quotes\", 'in quotes'" 

一大堆的"\"符號(hào)讓人看起來(lái)很倒胃口。如果你與我有同感,那么,我們?cè)贚ua中,可以用另一種表示方法:用"[["和"]]"將多行的字符串括起來(lái),如:

  1. page = [[  
  2. <HTML> 
  3. <HEAD> 
  4. <TITLE>An HTML Page</TITLE> 
  5. </HEAD> 
  6. <BODY> 
  7. <A HREF="http://www.lua.org">Lua</A> 
  8. [[a text between double brackets]]  
  9. </BODY> 
  10. </HTML> 
  11. ]] 

值得注意的是,在這種字符串中,如果含有單獨(dú)使用的"[["或"]]"就仍然得用"\["或"\]"來(lái)避免歧義。當(dāng)然,這種情況是極少會(huì)發(fā)生的。

(5)Table

關(guān)系表類型,這是一個(gè)很強(qiáng)大的類型。我們可以把這個(gè)類型看作是一個(gè)數(shù)組。只是C語(yǔ)言的數(shù)組,只能用正整數(shù)來(lái)作索引;在Lua中,你可以用任意類型來(lái)作數(shù)組的索引,除了nil。同樣,在C語(yǔ)言中,數(shù)組的內(nèi)容只允許一種類型;在Lua中,你也可以用任意類型的值來(lái)作數(shù)組的內(nèi)容,除了nil。

Table的定義很簡(jiǎn)單,它的主要特征是用"{"和"}"來(lái)括起一系列數(shù)據(jù)元素的。比如:

  1. T1 = {} 定義一個(gè)空表  
  2. T1[1]=10 然后我們就可以象C語(yǔ)言一樣來(lái)使用它了。  
  3. T1["John"]={Age=27Gender="Male"

這一句相當(dāng)于:

  1. T1["John"]={} 必須先定義成一個(gè)表,還記得未定義的變量是nil類型嗎  
  2. T1["John"]["Age"]=27  
  3. T1["John"]["Gender"]="Male" 

當(dāng)表的索引是字符串的時(shí)候,我們可以簡(jiǎn)寫(xiě)成:

  1. T1.John={}  
  2. T1.John.Age=27 
  3. T1.John.Gender="Male" 
  4. 或  
  5. T1.John{Age=27Gender="Male"

這是一個(gè)很強(qiáng)的特性。

在定義表的時(shí)候,我們可以把所有的數(shù)據(jù)內(nèi)容一起寫(xiě)在"{"和"}"之間,這樣子是非常方便,而且很好看。比如,前面的T1的定義,我們可以這么寫(xiě):

  1. T1=  
  2. {  
  3. 10, 相當(dāng)于 [1] = 10  
  4. [100] = 40,  
  5. John= 如果你原意,你還可以寫(xiě)成:["John"] =  
  6. {  
  7. Age=27, 如果你原意,你還可以寫(xiě)成:["Age"] =27  
  8. Gender=Male 如果你原意,你還可以寫(xiě)成:["Gender"] =Male  
  9. },  
  10. 20 相當(dāng)于 [2] = 20  

看起來(lái)很漂亮,不是嗎?我們?cè)趯?xiě)的時(shí)候,需要注意三點(diǎn):

第一,所有元素之間,總是用逗號(hào)","隔開(kāi);

第二,所有索引值都需要用"["和"]"括起來(lái);如果是字符串,還可以去掉引號(hào)和中括號(hào);

第三,如果不寫(xiě)索引,則索引就會(huì)被認(rèn)為是數(shù)字,并按順序自動(dòng)從1往后編;

表類型的構(gòu)造是如此的方便,以致于常常被人用來(lái)代替配置文件。是的,不用懷疑,它比ini文件要漂亮,并且強(qiáng)大的多。

(6)Function

函數(shù),在Lua中,函數(shù)的定義也很簡(jiǎn)單。典型的定義如下:

  1. function add(a,b) add 是函數(shù)名字,a和b是參數(shù)名字  
  2.  return a+b return 用來(lái)返回函數(shù)的運(yùn)行結(jié)果  
  3. end 

請(qǐng)注意,return語(yǔ)言一定要寫(xiě)在end之前。假如你非要在中間放上一句return,那么請(qǐng)寫(xiě)成:do return end。

還記得前面說(shuō)過(guò),函數(shù)也是變量類型嗎?上面的函數(shù)定義,其實(shí)相當(dāng)于:

  1. add = function (a,b) return a+b end 

當(dāng)你重新給add賦值時(shí),它就不再表示這個(gè)函數(shù)了。你甚至可以賦給add任意數(shù)據(jù),包括nil (這樣,你就清除了add變量)。Function是不是很象C語(yǔ)言的函數(shù)指針呢?和C語(yǔ)言一樣,Lua的函數(shù)可以接受可變參數(shù)個(gè)數(shù),它同樣是用"…"來(lái)定義的,比如:

  1. function sum (a,b,…) 

如果想取得…所代表的參數(shù),可以在函數(shù)中訪問(wèn)arg局部變量(表類型)得到。

  1. 如 sum(1,2,3,4)  
  2. 則,在函數(shù)中,a = 1b = 2arg = {3, 4} 

更可貴的是,它可以同時(shí)返回多個(gè)結(jié)果,比如:

  1. function s()  
  2. return 1,2,3,4  
  3. end  
  4. a,b,c,d = s() 此時(shí),a = 1b = 2c = 3d = 4 

前面說(shuō)過(guò),表類型可以擁有任意類型的值,包括函數(shù)!因此,有一個(gè)很強(qiáng)大的特性是,擁有函數(shù)的表,哦,我想更恰當(dāng)?shù)膽?yīng)該說(shuō)是對(duì)象吧。Lua可以使用面向?qū)ο缶幊塘?。不信?那我舉例如下:

  1. t =  
  2. {  
  3.  Age = 27 
  4.  add = function(self, n) selfself.Age = self.Age+n end  
  5. }  
  6. print(t.Age) 27  
  7. t.add(t, 10)  
  8. print(t.Age) 37 

不過(guò),t.add(t,10) 這一句實(shí)在是有點(diǎn)土對(duì)吧?沒(méi)關(guān)系,在Lua中,你可以簡(jiǎn)寫(xiě)成:

  1. t:add(10) 相當(dāng)于 t.add(t,10) 

Userdata 和 Thread

這兩個(gè)類型的話題,超出了本文的內(nèi)容,就不打算細(xì)說(shuō)了。

就這么結(jié)束了嗎?當(dāng)然不是,接下來(lái),需要用Lua解釋器,來(lái)幫助你理解和實(shí)踐了。這篇小文只是幫助你大體了解Lua的語(yǔ)法。如果你有編程基礎(chǔ),相信會(huì)很快對(duì)Lua上手了。

小結(jié):關(guān)于Lua游戲腳本語(yǔ)言入門(mén)學(xué)習(xí)指導(dǎo)的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2011-08-22 16:59:28

Lua

2011-08-22 18:08:09

Lua腳本

2011-08-22 18:00:53

Lua語(yǔ)言

2011-08-22 17:41:23

LUA 腳本 語(yǔ)言

2011-08-24 13:32:17

2011-06-22 14:07:42

Lua

2011-08-25 11:02:04

2011-08-23 09:44:28

LUA腳本

2011-08-25 09:55:27

2010-02-26 09:33:51

Python腳本

2011-08-25 14:26:40

LUA數(shù)據(jù)文件

2009-06-10 08:41:15

Linux腳本語(yǔ)言

2011-08-24 17:05:01

Lua

2010-02-24 14:04:32

Python腳本語(yǔ)言

2011-08-25 10:35:14

Lua語(yǔ)言函數(shù)

2011-08-25 13:22:40

CEGUILua腳本

2011-04-08 09:24:24

2012-07-16 11:23:18

LinuxWindows腳本語(yǔ)言

2011-08-16 10:03:45

Groovy編程語(yǔ)言Web

2009-07-15 17:27:30

Jython入門(mén)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)