lua错误总结

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来实现显示文本


你可能感兴趣的:(lua错误总结)