cocos2d-x TestLua 之 CCMenuItemImage 菜单类

本文介绍了cocos2d-x中CCMenu的构成原理,重点讲解了CCMenuItemImage类,它是通过图片资源来创建菜单项的。此外,还提及了其他CCMenuItem子类,如CCMenuItemFont、CCMenuItemToggle和CCMenuItemSprite,分别用于创建文本、开关和精灵按钮。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感谢点评与关注,欢迎转载与分享。
勤奋努力,持之以恒!

1.CCMenu是由菜单项CCMenuItem 组成的,通常先创建菜单项,然后使用1个或多个菜单项生成菜单。

2.CCMenuItem子类:

CCMenuItemImage:图片按钮菜单项(通过图片资源创建菜单项)
CCMenuItemFont:文本按钮菜单项(通过文本创建菜单项
CCMenuItemToggle:开关按钮菜单项(通过其它类如CCMenuItemImage,CCMenuItemFont,CCMenuItemSprite创建菜单项)
CCMenuItemSprite:精灵按钮菜单项(通过精灵CCSprite创建菜单项)
CCMenuItemLabel:文本标签按钮菜单项(通过文本标签创建菜单项)

local function MenuLayer1()
    local isHorizontal = true
    local layer1 = CCLayer:create()
    
    local function setMenuHorizontal()
        for i=0,1 do
            local menu = layer1:getChildByTag(100+i)
            menu = tolua.cast(menu,"CCMenu")
            
            if i == 0 then
                menu:alignItemsHorizontally() --水平方向默认间隙排列
                menu:setPosition(ccpAdd(ccp(size.width*0.5,size.height*0.5),ccp(0,50)))
            else
                menu:alignItemsHorizontallyWithPadding(40) --水平方向以padding间隙排列
                menu:setPosition(ccpSub(ccp(size.width*0.5,size.height*0.5),ccp(0,50)))
            end
        end
    end
    
    local function setMenuVertical()
        for i=0,1 do
            local menu = tolua.cast(layer1:getChildByTag(100+i),"CCMenu")
            if i==0 then
                menu:alignItemsVertically() --垂直方向默认间隙排列
                menu:setPosition(ccpAdd(ccp(size.width*0.5,size.height*0.5),ccp(100,0)))
            else
                menu:alignItemsVerticallyWithPadding(40) --垂直方向以padding间隙排列
                menu:setPosition(ccpSub(ccp(size.width*0.5,size.height*0.5),ccp(100,0)))
            end
        end
    end

    local function playCallFunc(tag,sender)
        tolua.cast(sender:getParent():getParent():getParent(),"CCLayerMultiplex"):switchTo(0)
    end
    
    local function highCallFunc(tag,sender)
        local menu = tolua.cast(sender:getParent(),"CCMenu")
        if menu:getOpacity() == 128 then
            menu:setOpacity(255)
        else
            menu:setOpacity(128)
        end
    end
    
    local function aboutCallFunc(tag,sender)
    
        if isHorizontal == true then
            setMenuVertical()
        else
            setMenuHorizontal()
        end
        isHorizontal = not isHorizontal
        
    end
    
    for i=0,1 do
        local item1 = CCMenuItemImage:create("btn-play-normal.png","btn-play-selected.png") --参数1:正常状态的图片  参数2:按下去时的图片 参数3:不可点选下的图片
        local item2 = CCMenuItemImage:create("btn-highscores-normal.png","btn-highscores-selected.png")
        local item3 = CCMenuItemImage:create("btn-about-normal.png","btn-about-selected.png")

        item1:registerScriptTapHandler(playCallFunc)  --当这个菜单项被按下时候的回调函数(playCallFunc)
        item2:registerScriptTapHandler(highCallFunc)
        item3:registerScriptTapHandler(aboutCallFunc)
        
        item1:setScaleX(1.5) --对精灵宽度进行缩放
        item2:setScaleX(0.5)
        item3:setScaleX(0.5)
        
        local menu = CCMenu:create() --创建菜单,并加入3个菜单项
        menu:addChild(item1)
        menu:addChild(item2)
        menu:addChild(item3)
        layer1:addChild(menu,1,100+i)
    end
    
    setMenuHorizontal()
    
    return layer1
end

示例图如下:

图1:

图2:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值