解决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了。
相关文章
相关标签/搜索