http://blog.csdn.net/ecaifu800/article/details/23917943
1 import和require
local Component = import("..Component")
local EventProtocol = class("EventProtocol", Component)
兩個點..是指上個目錄
local UILayout = import(".UILayout")
local UIBoxLayout = class("UIBoxLayout", UILayout)
一個點.是指當前目錄
2 框架觀察
3 :號和.的區別
:是個語法糖,呼叫的函式會自動傳遞引數self
即
local a = {x = 0}
function a.foo(self, a)
self.x = a
end
function a:foo2(a)
self.x = a
end
--呼叫時:
a.foo(a, 2)
a.foo2(2)
上述兩個操作是等價的,用:時就省去了定義和呼叫時需要額外新增self用來指代自身的麻煩
4 ipairs 和paris的區別
http://blog.csdn.net/witch_soya/article/details/7556595
local components = {
"components.behavior.StateMachine",
"components.behavior.EventProtocol",
"components.ui.BasicLayoutProtocol",
"components.ui.LayoutProtocol",
"components.ui.DraggableProtocol",
}
for _, packageName in ipairs(components) do
print(_,packageName);
end
print("------");
local tabFiles = {
[1] = "test1",
[3] = "test3",
[6] = "test6",
[4] = "test4"
}
for k, v in ipairs(tabFiles) do
print(k,v);
end
>lua -e "io.stdout:setvbuf 'no'" "for.lua"
1 components.behavior.StateMachine
2 components.behavior.EventProtocol
3 components.ui.BasicLayoutProtocol
4 components.ui.LayoutProtocol
5 components.ui.DraggableProtocol
------
1 test1
ipairs是從1,2,3...順序開始遍歷 碰到nil就退出 遍歷是有序的
pairs不是 pairs遍歷是無序的 鍵值對遍歷
5 隨機數生成
lua 隨機數math.random()
Lua 生成隨機數需要用到兩個函式:
math.randomseed(xx), math.random([n [, m]])
1. math.randomseed(n) 接收一個整數 n 作為隨機序列種子。
2. math.random([n [, m]]) 有三種用法: 無參呼叫, 產生 (0,1) 之間的浮點隨機數; 只有引數 n, 產生 [1,n] 1-n 之間,包括1,n的整數; 有兩個引數 n, m, 產生 [n,m]n-m 之間包括n,m的隨機整數
對於相同的隨機種子, 生成的隨即序列一定是相同的。所以程式每次執行, 賦予不同的種子很重要。很自然想到使用系統時間作為隨機種子,即:
math.randomseed(os.time())
----然後不斷產生隨機數
for i=1, 5 do
print(math.random())
end
http://blog.csdn.net/zhangxaochen/article/details/8095007
6 c++ lua互動
http://www.cnblogs.com/hmxp8/archive/2011/11/23/2259777.html
http://blog.csdn.net/liaowenfeng/article/details/10607915
tolua.isnull是判斷一個userdata是否存在或者已經被釋放的。如果傳入的引數不是userdata,當然會返回true。
7 lua table api
http://www.cnblogs.com/whiteyun/archive/2009/08/10/1543139.html
運算元組元素:
local test = {1,2,3,4,5} for i=1,#test do if test[i] == 3 then table.remove(test, i) end end --[[table.remove()函式刪除並返回table陣列部分位於pos位置的元素. 其後的元素會被前移. pos引數可選, 預設為table長度, 即從最後一個元素刪起.]] table.remove(test) for k, v in ipairs(test) do print(k,v); end
--[[
1 1
2 2
3 4
]]
8 記憶體管理
老師,在橫版遊戲裡面,很多線上玩家都在同一個場景,切換進入下一個地圖的時候,使用的是另一個Scene,請問下場景裡面的玩家物件是不是不用清除,切換另一個Scene的時候,自動銷燬上一個Scene的顯示物件的嗎?
這個問題涉及到兩方面的問題,一個是CCDirector裡的場景切換,你可以看下CCDirector.h裡面有關scene的幾個方法:runWithScene()、pushScene()、popScene()、replaceScene()幾個方法;第二個問題是記憶體管理機制的問題,現在的記憶體管理是通過parent和child來進行,如果parent node被釋放的話,child node也是會被釋放的
8 物理引擎
quick-cocos2d-x物理引擎之chipmunk(一)http://my.oschina.net/lonewolf/blog/173427