lua錯誤總結 轉自http://blog.csdn.net/chenrunhua

1.getPosition 需要再次轉換ccp(getPosition)

2.獲取到node時,用的時候需要強制轉換下tolua.cast(pNode, "CCNode")再使用

3.添加註冊一個會調用函數:參考CCMenuItem.cpp的registerScriptTapHandler(可以實現lua的的重載其中的成員方法)

a.添加一個成員變量作爲保存handler

b.在CCLuaEngine.cpp中添加執行事件的會調用,其中這個函數實現獲取之前保存的會調用函數,把參數壓棧,然後回調給lua

c.在c++成員函數調用上面實現的方法。

4.遍歷不是數組的table不能用getn和#來獲取table的大小,只能用 for i, v in pairs(WeaponAddit) do 來遍歷table 其中key爲i,v爲value

5.使用字符串"xxx"作爲一個變量,訪問時可以用self[xxx]

6.使用CCScrollView來添加節點時,沒有設置container的話,裏面會默認創建cclayer作爲container,然後再addchild時把child添加到cclayer中。因此需要刪除scrollview的子節點時需要獲取container,然後刪除container的所有的子節點

7.lua類名.變量名爲全局變量,即每次new出來是共用的,想要每次不一樣的話需要在new獲取到實例時再添加對應的變量

8.attempt to index local 'self' (a number value)

使用引擎提供的CCBuilderReaderLoad加載ccbi文件,回調函數報錯使用: 

function MainScene:dialogClick() 

cclog("dialogClick") 

  local PersonPanel=require "luascript/PersonPanel" 

  self:addChild(PersonPanel.new()) 

  self:setPosition(0,0) 

 end 

 解決方案:

定義方法:

function handler(target, method) 

 return function(...) 

 return method(target, ...) 

   end

end

在CCBuilderReaderLoad函數裏所有設置回調的地方做如下修改。

--proxy:setCallback(callbackNode, ccb[documentControllerName][cbName], integerValue:getValue())

  proxy:setCallback(callbackNode, handler(owner, owner[cbName]), integerValue:getValue())

引用:http://www.68idc.cn/help/jiabenmake/qita/2014011167018.html

9.json encode 數據類型超過14位時導致後面的數據被四捨五入

原來文件中默認精度設定爲14位,假如想要改大的,可以修改文件fpconv.c中set_number_format函數中”precision“把14改成你需要的精度,

lua_cjson.c中函數json_cfg_encode_number_precision裏的14位改成需要的精度;

json.lua中添加初始化:cjson.encode_number_precision(xxx),“xxx”爲你需要的精度

10.加載ccbi時,報以下錯誤:ccb:expression:ccnodeloadersiterator !=

勾選菜單doculment 子菜單javascript controlled

11.tip設置座標點時,當座標點爲浮點數時字體和透明度變得比整形差比較多,模擬器會這樣,但是真機不會模糊的

12.用ccb做的cccontrolButton在響應函數時,會傳入兩個參數,其中第二個是cccontrolButton本身,這樣可以獲取到本身的tag

13.重設cccontrolButton的label時,需要獲取label的node,然後再設置字符,注意當設置爲button爲別的狀態時會恢復到原來的字符,需要重新設置

14.layer和node,響應的事件在最前面一個,雖然不在對應的區域,但是優先能響應

15.動作執行,假如在callback裏面調用外部定義的action這個會提示錯誤“CCSequence:createWithTwoActions ASSERT FAILED ON LUA EXECUTE:”

解決方法:http://blog.csdn.net/song_hui_xiang/article/details/9174763

16.quickx,可以對sprite單獨進行設置事件,當有很多精靈需要事件的響應的時候可以考慮用layer的touch中x,y來判斷當前的點擊是否在處於精靈的boundingbox的範圍之內

17.quickx 變量等於另外一個變量的new一個實例或者一個table,賦值的是索引,指向是同一個內容;

一個new出來的一個對象想要用print_lua_table來打印table,在打印前需要把__index置空,否則會導致無窮的循環。

18.for是閉包迭代,ipairs(iter)、pairs(迭代器爲next)是無閉包狀態迭代

19.quickx 區域rect在不同的分辨率下,注意區域的原始座標不會變:xx.origin.x及xx.origin.y; 當在滾動列表中,在touch中判斷列表中的元素是否在可見區域才能響應的話就會出現點擊時沒有響應的問題,因此因此需要用 display.c_left= -xx.00 display.c_right = xx.00來跟標準的相減來得出偏移的位置

20.lua實現私有的成員定義成爲local類型

21.setfenv爲設定一個新的環境變量,這個可以解決污染全局變量的問題,引用外部變量可以使用這個函數之前,使用local來保存需要的接口,然後直接調用;

這個相對使用metamethod,__index = _G效率要高

22.用local 來實現接口及成員的私有性

23.error: 'const class std::type_info' has no member named 'hash_code'

APP_CPPFLAGS := -std=c++11

24.CCLabelTTF,繼承了ccsprite,利用CCTexture2D來繪製bitmap,生成材質,然後使用setTexture來實現顯示文本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章