本文整理 Cocos2d-x Lua 中几种常见菜单(Menu)的创建方式,包括文本菜单、精灵菜单、图片菜单以及开关菜单。每种菜单都通过 cc.Menu 承载对应的 MenuItem,并通过 registerScriptTapHandler 注册点击回调。

示例代码

   local function callBack(send)
                     print("click the menu")
                   end
                
                
                --文本菜单
                   local menu_1=cc.MenuItemFont:create("exit")
                   menu_1:registerScriptTapHandler(callBack)
                   menu_1:setPosition(200,200)
                
                   local menu1=cc.Menu:create(menu_1)
                   menu1:setPosition(0,0)
                  -- layer:addChild(menu1)
                
                
                
                
                --精灵菜单
                   local s1=cc.Sprite:create("off.png")
                   local s2=cc.Sprite:create("off.png")
                   s1:setOpacity(80)
                   local menu_2=cc.MenuItemSprite:create(s1,s2,s1)
                   menu_2:registerScriptTapHandler(callBack)
                   menu_2:setPosition(200,150)
                
                   local menu2=cc.Menu:create(menu_2)
                   menu2:setPosition(0,0)
                   layer:addChild(menu2)
                
                
                
                
                --图片菜单
                    local menu_3=cc.MenuItemImage:create("on.png","off.png","on.png")--正常,点中,禁止
                    menu_3:registerScriptTapHandler(callBack)
                    menu_3:setPosition(200,50)
                
                    local menu3=cc.Menu:create(menu_3)
                    menu3:setPosition(0,0)
                    layer:addChild(menu3)
                
                
                
                
                --开关菜单
                        --回调函数
                    local isMusic=true
                    local function callBack(send)
                        isMusic = not isMusic
                        print(tostring(isMusic))
                    end
                
                    local menu_on=cc.MenuItemImage:create("on.png","on.png","on.png")
                    local menu_off=cc.MenuItemImage:create("off.png","off.png","off.png")
                
                        --创建菜单Item
                    local menu1=cc.MenuItemToggle:create(menu_on,menu_off)
                    menu1:setPosition(200,200)
                    menu1:registerScriptTapHandler(callBack)
                
                        --实例化菜单
                    local menu=cc.Menu:create(menu1)
                    menu:setPosition(0,0)
                    layer:addChild(menu)

要点说明

  • 文本菜单:使用 cc.MenuItemFont 创建纯文字按钮,通过字符串指定显示文本。
  • 精灵菜单:使用 cc.MenuItemSprite,传入三个 cc.Sprite 分别对应正常、点中、禁用三种状态,示例中通过 setOpacity 调整透明度来区分。
  • 图片菜单:使用 cc.MenuItemImage,直接传入三张图片文件名(正常、点中、禁止)即可生成按钮。
  • 开关菜单:使用 cc.MenuItemToggle,在两个(或多个)菜单项之间切换,常用于开关类选项(如示例中的背景音乐开关)。

所有 MenuItem 创建完成后,都需要通过 cc.Menu:create 封装成一个 Menu 对象,并调用 layer:addChild 才能真正显示到场景中。