解決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了。
相關文章
相關標籤/搜索