1. 程式人生 > >FairyGUI筆記:Button (十四)

FairyGUI筆記:Button (十四)

up 按鈕正常的狀態;down 普通按鈕按下時的狀態/單選或多選按鈕被選中時的狀態;over 當滑鼠指標懸浮在按鈕上方時的狀態;selectedOver 當單選或多選按鈕選中時,滑鼠指標懸浮到按鈕上方時的狀態;disabled 按鈕不可用時的狀態;selectedDisabled 當單選或多選按鈕選中時,按鈕不可用時的狀態。

GButton

設定按鈕的標題或者圖示,你甚至不需要強制物件為GButton的型別,直接用GObject提供的介面就可以,例如:

GObject obj = gcom.GetChild("n1");
obj.text = "hello";
obj.icon = "ui://包名/圖片名";

如果是單選或者多選按鈕,下面的方法設定是否選中:

GButton button = gcom.GetChild("n1").asButton;
button.selected = true;

通常對於單選/多選按鈕,使用者點選後就能切換狀態。如果你不需要這樣,希望只能通過API改變狀態,那麼可以:

//關閉後你只能通過改變selected屬性修改按鈕狀態,使用者點選不會改變狀態。
button.changeStateOnClick = false;

通過程式碼設定按鈕與控制器的聯動的方式是:

button.pageOption.controller = aController;
button.pageOption.index = 1; //通過索引設定
button.pageOption.name = "page_name"; //或通過頁面名稱設定

按鈕全域性聲音的設定為:

//Unity版本要求一個AudioClip物件,如果是使用庫裡面的資源,那麼可以使用:
UIConfig.buttonSound = (AudioClip)UIPackage.GetItemAssetByURL("ui://包名/聲音名");
//其他版本要求一個資源url,即:
UIConfig.buttonSound = "ui://包名/聲音名";
//全域性音量    
UIConfig.buttonSoundVolumeScale = 1f;

這個設定只能在建立任何UI前設定。如果要控制全域性聲音的開關或音量,可以這樣:

//開關聲音(Laya和Egret自己有提供聲音開關,不需要用這個,請查閱他們的文件)
GRoot.inst.EnabledSound();
GRoot.inst.DisableSound();
//調整全域性聲音音量,這個包括按鈕聲音和動效播放的聲音
GRoot.inst.soundVolume = 0.5f;

監聽普通按鈕點選的方式為:(注意,點選事件不只是按鈕有,任何支援觸控的元件都有,例如普通元件、裝載器、圖形等,他們的點選事件註冊方式和按鈕是相同的。)

//Unity/Cry
button.onClick.Add(onClick);
//AS3
button.addClickListener(onClick);
//Egret
button.addClickListener(this.onClick, this);
//Laya
button.onClick(this, this.onClick);
//Cocos2dx
button->addClickListener(CC_CALLBACK_1(AClass::onClick, this));

按鈕可以模擬觸發點選:

//模擬觸發點選,只會有一個觸發的表現,以及改變按鈕狀態,不會觸發偵聽按鈕的點選事件。
button.FireClick(true);
//如果同時要觸發點選事件,需要額外呼叫:(僅Unity/Cry示例,其他平臺自己研究)
button.onClick.Call();

單選和多選按鈕狀態改變時有通知事件:

//Unity/Cry
button.onChanged.Add(onChanged);
//AS3
button.addEventListener(StateChangeEvent.CHANGED, onChanged);
//Egret
button.addEventListener(StateChangeEvent.CHANGED, this.onChanged, this);
//Laya
button.on(fairygui.Events.STATE_CHANGED, this, this.onChanged);
//Cocos2dx
button->addEventListener(UIEventType::Changed, CC_CALLBACK_1(AClass::onChanged, this));