加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos按钮置灰

发布时间:2020-12-14 17:23:58 所属栏目:百科 来源:网络整理
导读:先贴代码: function FreeCoinLayer:ensureBtn( btn,enable ) print("FreeCoinLayer:ensureBtn") btn:setTouchEnabled( enable ) btn:setBright( enable ) if enable then btn:getVirtualRenderer():setState(0) else btn:getVirtualRenderer():setState(1)

先贴代码:

function FreeCoinLayer:ensureBtn( btn,enable )
    print("FreeCoinLayer:ensureBtn")
    btn:setTouchEnabled( enable )
    btn:setBright( enable )
    if enable then
        btn:getVirtualRenderer():setState(0)
    else
        btn:getVirtualRenderer():setState(1)
    end
    --vr:setState(1)
    local children = btn:getChildren()
    for name,child in pairs( children ) do
        local vr = child:getVirtualRenderer()
        if enable then
            vr:setState( 0 )
        else
            vr:setState( 1 )
        end
    end
end

简单介绍一下函数作用,参数分别是一个按钮对象以及一个是否要激活的一个开关。

首先是获取到这个按钮的渲染器,通过getVirtualRenderer。看一下这个函数的源码,我贴出来:

Node* Button::getVirtualRenderer()
{
    if (_bright)
    {
        switch (_brightStyle)
        {
            case BrightStyle::NORMAL:
                return _buttonNormalRenderer;
            case BrightStyle::HIGHLIGHT:
                return _buttonClickedRenderer;
            default:
                return nullptr;
        }
    }
    else
    {
        return _buttonDisabledRenderer;
    }
}

再贴一下返回值的类型:

    Scale9Sprite* _buttonNormalRenderer;
    Scale9Sprite* _buttonClickedRenderer;
    Scale9Sprite* _buttonDisabledRenderer;

其实说白了返回的是一个九妹类型,通过这个对象的setState就可以设置相应的效果了,不需要重写shader。

我这个引擎用的是3.4

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读