先贴代码:
- 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