由於本人這個學期選了一門選修課《cocos2d-x移動遊戲開發》,所以想整理一下筆記了。不保證部落格的全面性,我只記一些我認為需要記錄的,最好的學習方式還是看書。
學習資料:《cocos2d-x之lua核心程式設計》、極客學院、老師的ppt
學習環境:mac os x,sublime text,cocos2d-x 3.1,lua 5.3
編譯環境的搭建請參考其他部落格,感覺搭建環境還是挺費事的。
一、lua基礎語法
1、21個關鍵字:
and break do else else if end false for function if
in local nil not orrepeat return then true until while
2、lua中的8種基礎型別:
nil: 空 (可以用來刪除乙個元素)
boolean: 布林
number: 數字
string: 字串
function: 函式
table: 表
userdata: 定義資料型別
thread: 執行緒
用函式type來檢測乙個變數的型別。
如型別測試:
print(type(var))
var = 20
print(type(var))
var = "hello world"
print(type(var))
var = print
print(type(var))
var = {}
print(type(var))
3、string型別
來處理轉義定義字串,括號中間可以加 若干個"="號,如 [==[ ... ]==]
下面的語句所表 的是完全相同的字串:
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo
123"]==]
4、需要連線兩個字串用連線操作符".."( 類似c語言中的strcat )
eg: print("hello".."world")
5、"#"獲取字串的長度。
eg: a = "hello world"
print(#a)
或string庫函式
a = "hello world" print(string.len(a)) (貌似這個函式最新版本的lua不再支援了)
6、table = 陣列+對映
1)陣列
①a = {}
a[1]=1
a[2]=5
a[3]="hello"
print(a[1],a[2],a[3])
②a =
print(a[1],a[2],a[3])
這兩種定義方式效果一樣。
2)對映
類似於c語言中的map,裡面的是key值。(資料庫的table)
①a= {}
a["hello"]=2
a[3]=false
print(a.hello,a[3])
②a=print(a.hello,a[3])
這兩種定義方式效果一樣。
7、邏輯運算子:and(與) or(或) not(非 )
8、區域性變數:
i = 10 -- 全域性變數
local j = i -- 區域性變數
9、控制語句
1)if...then...else
lua中的寫法:
if a>b then
else if a>c then
else
end
lua中不支援switch語句,條件判斷只有if語句。
2)while
lua中的寫法:
while a<5 do
a = a + 1
end
3)repeat...until
lua中的repeat語句類似於c語言中的do...while語句,先執行一次再判斷條件是否滿足。
lua中的寫法:
local i = 0
repeat
i = i + 1
print(i..", ")
until i>3
--輸出為1,2,3,4
4)for迴圈
①數字for迴圈
for var = from,end,step do
loop-part
end
eg:倒序輸出整數10到1。
for i=10,1,-1 do
print(i)
end
表示從from到end,每次遞增step。step引數如果不設定的話預設為1。
注:for迴圈的引數為表示式或者函式呼叫時,只會呼叫一次
for i=1,f(x) do
print(i)
end
②泛型for迴圈,類似於c++中的迭代器(iterator)
io.lines用於遍歷每行; pairs迭代table元素; ipairs用於迭代陣列元素; string.gmatch用於迭代字串中的單詞。
days =
for k,v in pairs(days) do
print(v)
end
pairs遍歷的結果是雜湊的,隨機的。
a =
for k,v in ipairs(a) do
print(k,v)
end
編譯結果為:1 20
2 30
原因:ipairs只遍歷陣列,pairs遍歷陣列+對映。
5)控制語句break與return
break 用於退出當前迴圈(for, repeat, while) ——迴圈外不可使
return 用來從函式返回結果,當乙個函式自然結束,尾部會有 個預設的return。
tip: lua要求break和return只能出現在block的結尾句
10、函式
函式的目的:封裝、抽象
封裝是為了隱藏細節
抽象是為了便於理解和重複使用
1)函式定義方法
function func()
end
func = function() end --注意:end不可以另起一行
以上兩種函式定義方法效果一樣
2)在lua語言中函式可以當做乙個值賦給變數。
add = function(a,b) --把函式賦給add
return a+b
endfoo = add --把函式賦給foo
print(foo(1,5))
lua的多返回值
function add(a,b)
return a+b,a-b
endprint(add(1,5)) -->結果為6 -4
多變數賦值
a,b = 1,2
a,b = b,a
print(a, b) -->2,1
3)函式的引數
lua中函式的引數可以有任意多個。
當給函式傳遞引數時超過了函式定義的形參個數,那麼多餘的引數會被丟棄。
function sum (a, b)
return a + b
endprint(sum(10, 20, 30)) ——結果為30,自動把多餘的引數30丟棄
傳入的引數形參少,那麼缺少的形參的值預設為nil
function sum (a, b)
return a + b
endprint(sum(10)) ——結果為0,相當於10+nil=10
4)可變引數
function add( ... )
local s = 0
for i,v in ipairs do
s = s + v
endreturn s
endprint(add (1,2,3,4,5)) --執行結果為15
5)閉包函式
閉包函式是指將乙個函式寫在另乙個函式之內,內部函式可以訪問外部函式的區域性變數。內部函式沒有名稱,通常也叫匿名函式。
function newcounter()
local i = 0
return function()
i=i+1
return i
endendc1 = newcounter()
print(c1()) --> 1
print(c1()) --> 2
lua程式設計之補充知識
lua語言中的變數在預設情況下是全域性變數,所有的區域性變數在使用前必須宣告。區域性變數的生效範圍僅限於宣告它的 塊。x 10 x 為全部變數 local i 1 i 為區域性變數有些人認為,在 段的中間位置宣告變數是乙個不好的習慣,實際上恰恰相反 1 在需要時才宣告變數可以避免漏掉初始化這個變數 ...
Lua物件導向程式設計之基礎結構table簡例
物件導向程式設計 object oriented programming是一種非常流行的計算機程式設計架構。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua中的function可以用來表示方法。那麼lua中的類可以通過table function模擬出來。簡例 czhe...
windows核心程式設計之核心物件
由於不是計算機科班出身,一直對於程序和執行緒沒有深入的了解,現開始看windows核心程式設計,將具體內容整理一下,以加深印象。1 核心物件,即作業系統維護的乙個資料結構,內部維護該物件的各種資料資訊,常見的核心物件有 用於建立程序的程序核心物件,用於建立執行緒的執行緒核心物件,建立檔案的檔案核心物...