UI組件 | Toggle

Toggle(複選框)組件

Toggle 是一個 CheckBox,當它和 ToggleGroup 一起使用的時候,可以變成 RadioButton。

創建 Toggle 組件

層級管理器右擊->創建節點->創建 UI 節點->Toggle 即可創建 Toggle 組件。

節點說明

Toggle 組件的節點樹一般爲:

注:checkmark 在層級結構上要在 Background 上面,或者是 Background 的子節點。

屬性介紹

創建成功後,屬性面板可以看到 Toggle 組件特有的屬性,下面對這些屬性一一介紹:

屬性功能說明
TargetNode 類型,當 Toggle 發生 Transition 的時候,會相應地修改 Target 節點的 SpriteFrame,顏色或者 Scale。
interactable布爾類型,設爲 false 時,則 Toggle 組件進入禁用狀態。
Transition枚舉類型,包括 NONE, COLOR,SPRITE 和 SCALE。每種類型對應不同的 Transition 設置。詳情見下方的 Toggle Transition 部分。
isChecked布爾類型,如果這個設置爲 true,則 check mark 組件會處於 enabled 狀態,否則處於 disabled 狀態。
checkMarkcc.Sprite 類型,Toggle 處於選中狀態時顯示的圖片。
toggleGroupcc.ToggleGroup 類型, Toggle 所屬的 ToggleGroup,這個屬性是可選的。如果這個屬性爲 null,則 Toggle 是一個 CheckBox,否則,Toggle 是一個 RadioButton。
Check Events列表類型,默認爲空,用戶添加的每一個事件由節點引用,組件名稱和一個響應函數組成。詳情見下方的 Toggle 事件 部分。

Toggle Transition 部分

Toggle 的 Transition 用來指定當用戶點擊 Toggle 時的狀態表現。目前主要有 NONE,COLOR,SPRITE 和 SCALE。

Color Transition

屬性功能說明
NormalToggle 在 Normal 狀態下的顏色。
PressedToggle 在 Pressed 狀態下的顏色。
HoverToggle 在 Hover 狀態下的顏色。
DisabledToggle 在 Disabled 狀態下的顏色。
DurationToggle 狀態切換需要的時間間隔。

Sprite Transition

屬性功能說明
NormalToggle 在 Normal 狀態下的 SpriteFrame。
PressedToggle 在 Pressed 狀態下的 SpriteFrame。
HoverToggle 在 Hover 狀態下的 SpriteFrame。
DisabledToggle 在 Disabled 狀態下的 SpriteFrame。

Scale Transition

屬性功能
DurationToggle 狀態切換需要的時間間隔。
ZoomScale當用戶點擊按鈕後,按鈕會縮放到一個值,這個值等於 Toggle 原始 scale * zoomScale, zoomScale 可以爲負數

Toggle 點擊事件

Toggle 可以額外添加 Check 事件,用於響應玩家的點擊操作。有以下兩種方法。

通過屬性檢查器添加回調

序號屬性功能說明
1Target帶有腳本組件的節點。
2Component腳本組件名稱。
3Handler指定一個回調函數,當用戶點擊 Toggle 時會觸發此函數。
4CustomEventData用戶指定任意的字符串作爲事件回調的最後一個參數傳入。

1.編寫回調函數腳本:

// toggle.js


cc.Class({
    extends: cc.Component,


    properties: {
    },


    // LIFE-CYCLE CALLBACKS:


    // onLoad () {},


    start() {


    },


    // update (dt) {},


    // toggle 回調函數
    cb_toggle(toggle, customEventData) {  
        if(toggle.isChecked){
            console.log("Hello," + customEventData + "!");
        }       
    }
});

2.編寫好後將 toggle.js 掛在到 Toggle 節點下:

3.設置 Check Events 爲 1,並將 Toggle 節點拖到帶有 cc.node 的編輯框,後面分別選擇對應的腳本和方法,CustomEventData 處輸入要打印的字符串:

4.預覽遊戲,勾選 Toggle 發現控制檯正常打印出剛纔輸入的字符串,取消勾選 Toggle 發現控制檯沒有打印任何內容,說明成功調用回調函數:

通過腳本添加回調

通過腳本添加回調有以下兩種方式:

方法一:

這種方法添加的事件回調和使用編輯器添加的事件回調是一樣的,都是通過 Toggle 組件實現。首先需要構造一個 cc.Component.EventHandler 對象,然後設置好對應的 target、component、handler 和 customEventData 參數。

1.編寫腳本如下:

// toggle.js


cc.Class({
    extends: cc.Component,


    properties: {
    },


    // LIFE-CYCLE CALLBACKS:


    onLoad() {
        var checkEventHandler = new cc.Component.EventHandler();
        checkEventHandler.target = this.node; // 這個 node 節點是你的事件處理代碼組件所屬的節點
        checkEventHandler.component = "toggle"
        checkEventHandler.handler = "cb_toggle";
        checkEventHandler.customEventData = "小明";


        var toggle = this.node.getComponent(cc.Toggle);
        toggle.checkEvents.push(checkEventHandler);
    },


    start() {


    },


    // update (dt) {},


    // toggle 回調函數
    cb_toggle(toggle, customEventData) {
        // toggle 爲 toggle 本身
        if (toggle.isChecked) {
            console.log("Hello," + customEventData + "!");
        }
    }
});

2.編寫好後將 toggle.js 掛在到 Toggle 節點下,預覽遊戲,勾選 Toggle 發現控制檯正常打印出剛纔輸入的字符串,取消勾選 Toggle 發現控制檯沒有打印任何內容,說明成功調用回調函數:

方法二:

通過 toggle.node.on('toggle', ...) 的方式來添加,這是一種非常簡便的方式,但是該方式有一定的侷限性,在事件回調裏面無法獲得當前點擊按鈕的屏幕座標點,也無法傳遞 customEventData

1.編寫腳本如下:

// toggle.js


cc.Class({
    extends: cc.Component,


    properties: {
    },


    // LIFE-CYCLE CALLBACKS:


    onLoad() {
        this.node.on('toggle', this.cb_toggle, this);
    },


    start() {


    },


    // update (dt) {},


    // toggle 回調函數
    cb_toggle(toggle) {
        // toggle 爲 toggle 本身
        if (toggle.isChecked) {
            console.log("Hello,小明!");
        }
    }
});

2.編寫好後將 toggle.js 掛在到 Toggle 節點下,預覽遊戲,勾選 Toggle 發現控制檯正常打印出剛纔輸入的字符串,取消勾選 Toggle 發現控制檯沒有打印任何內容,說明成功調用回調函數:

拓展:

除了默認的資源,還可以替換 Background 和 Checkmate 圖片資源實現開關效果:



我是「Super於」,立志做一個每天都有正反饋的人!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章