本文地址:http://m.shnenglu.com/zdhsoft/archive/2014/08/23/208104.html
經過幾天的填坑,終于將現有的項目由cocos2dx 2.2.2移到cocos2dx 3.2,差點放棄3.2了,但在最后一刻,又把坑填平了。
cocos2dx 2.x到3.x是一個巨大的變化,可以算是完全不同。以前的類名,全是CC開頭的,現在全部去掉了。很多enum都改用enum class了
所以,你知道2.x,對不起,你比小白學習3.x更難。你用2.x的做法用在3.x,那就全是坑了...
言歸正傳,
2.x的時候,按鈕設置為Disabled的時候,是看不見。3.x的是沒有禁用狀態的,但是不會響應touch事件。
在cocostudio UI編輯的時候,按鈕是三種狀態的(有三個不同狀態的圖片),但沒有相應改變狀態的函數
于是,就分析源碼,發現它是在onPressStateChangedToDisabled();更改為禁用狀態的圖片。再找,是于
在其基類的ui:Widget的setBright和setHighlight有調用這個onPressStateChangedToDisabled,但是setEnabled僅僅是改為了一個成員變化,
所以你在這里設置disabled,就不會有任何效果。除了上面兩個函數之后,還有一個函數setBrightStyle是設置按鈕是普通狀態還是高亮狀態
下面是BrightStyle的定義
enum class BrightStyle
{
NONE = -1,
NORMAL,
HIGHLIGHT
};
下面是一個包裝的禁用啟用的函數
//設置按鈕禁用啟用狀態
inline void SetButtonEnabled(ui::Button * paramButton, bool paramEnabled)
{
if (isNULL(paramButton)) return;
if (paramEnabled)
{
paramButton->setBright(true);
paramButton->setEnabled(true);
paramButton->setTouchEnabled(true);
}
else
{
paramButton->setBright(false);
paramButton->setEnabled(false);
paramButton->setTouchEnabled(false);
}
}