解决cocos2d-x lua中菜单条目回调不能识别菜单条目的问题
解决思路
问题说明:
在C++中菜单回调函数中有一个参数是菜单条目,在函数中可以识别到是点击了那个条目,但在Lua中的菜单回调并没有把菜单条目作为参数传递进来(虽然有两个参数,但不知道有什么用...)
如何知道菜单回调有两个参数?请看以下代码:
local function itemSelector( ... ) cclog("param count %d", select("#", ... )) end这是一个菜单条目的回调,通过select函数可以获取到可变参数列表的个数。输出如下:
而且第一个参数类型是一个number(永远是-1。。),第二个参数类型是userdata,通过type(?)函数知道。
解决方案:
1. 定义一个lua函数,参数中需要传入一个itemId(菜单条目的标识)
2. 在该函数中创建菜单条目并设置菜单条目的回调,由于lua中闭包的特性,菜单条目的回调就可以访问到itemId,于是就可以识别到点击的是哪个条目了。
示例代码
lua代码:
-- 添加条目函数 function addItem(self, itemId) -- 条目选择器 local function itemSelector() cclog("selected item %d", itemId) end local item = CCMenuItemImage:create("res/ui/shop/shop_04.png","res/ui/shop/shop_05.png") item:registerScriptTapHandler(itemSelector) self.itemsLayer:addMenuItem(item) end
-- 添加菜单条目 for i=1,20 do self:addItem(i) end
扩展
当我们在Lua中给注册菜单回调函数时,如果函数中需要访问对象(self)中的成员时,可以在成员函数中注册菜单回调时定义一个局部函数,并把该局部函数作为菜单回调,由于是在成员函数中,所以这个局部函数就可以访问self了。
posted on 2014-08-14 14:56 linchaolong 阅读(413) 评论(0) 编辑 收藏 举报