解决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编辑  收藏  举报

导航