本文整理 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 才能真正显示到场景中。