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