Quick cocos2dx學習筆記

weixin_34321977發表於2014-11-02

http://www.swfdiy.com/?p=1663

http://blog.csdn.net/ecaifu800/article/details/23917943

 quick 在cdx+lua的上層,可以把quick當作是入門教程,cdx+lua當成是高階教程 

1 import和require

local Component = import("..Component")
local EventProtocol = class("EventProtocol", Component)

兩個點..是指上個目錄

local UILayout = import(".UILayout")
local UIBoxLayout = class("UIBoxLayout", UILayout)

一個點.是指當前目錄

2 框架觀察

framework裡的init就是呼叫framework.cc.init,cc.ui = import(".ui.init");這樣cc就能引用到相關的類

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。 

tolua 一些可以用的函式(測試過)

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 物理引擎

使用Physicals代替Box2D和chipmunk

quick-cocos2d-x物理引擎之chipmunk(一)http://my.oschina.net/lonewolf/blog/173427

相關文章