CocosCreator的ToggleGroup組件使用


用了CocosCreator也有一段時間,對ToggleGroup始終沒有仔細的學習過,只停留在用過的水平。所以因為認識有限,所以以為ToggleGroup對自定義支持得沒那么好,這兩天因為項目,再學習了一下,發現ToggleGroup的toggleItems屬性有着很大的作用。

ToggleGroup的toggle事件對checkmark作的僅僅是隱藏和顯示,而對background節點着沒有作用,如果有一天,我們想要點擊的時候checkmark顯示,而background隱藏的話,就可以用到toggleItems。

這里還有一個提示:當給toggleGroup動態增加toggle的時候,toggle組件的toggleGroup屬性是ToggleGroup組件,而不是掛着ToggleGroup組件的節點。

代碼為:


var node = cc.instantiate(this.prefab);
node.getComponent(cc.Toggle).toggleGroup = this.getComponent(cc.ToggleGroup);
node.parent = this.node;
當然如果,想要獲取toggleGroup的toggle節點,也可以用getChildByName或者類似的api來獲取,但是這種方法並不全面,因為雖然toggle節點基本上都是toggleGroup的子節點,但是總有例外,程序員不應該有這樣不嚴謹的邏輯。

而我個人對getChildByName這樣的api有點恐懼,因為這樣意味着會被束縛,這樣一來節點和子節點的關系會被束縛,子節點的名字會被束縛,而且代碼可讀性很差。

下面就寫一個點擊toggle的時候顯示checkmark隱藏background的實例。

代碼很簡單,而且寫一遍后,還可以用在其他toggle上面,復用性很好。


cc.Class({
extends: cc.Component,

properties: {
// foo: {
// default: null, // The default value will be used only when the component attaching
// to a node for the first time
// url: cc.Texture2D, // optional, default is typeof default
// serializable: true, // optional, default is true
// visible: true, // optional, default is true
// displayName: 'Foo', // optional
// readonly: false, // optional, default is false
// },
// ...
},

// use this for initialization
onLoad: function () {
this.node.on("toggle", this.onToggleChangeSpriteFrame, this);
},

onToggleChangeSpriteFrame : function() {
var toggle = this.getComponent(cc.Toggle);
var items = toggle.toggleGroup.toggleItems;
for(var i = 0; i < items.length; i++) {
items[i].target.active = true;
}
toggle.target.active = !toggle.isChecked;
},

// called every frame, uncomment this function to activate update callback
// update: function (dt) {

// },
});

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM