UI 組件 | Toggle

Toggle(復選框)組件

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

創(chuàng)建 Toggle 組件

層級管理器右擊->創(chuàng)建節(jié)點->創(chuàng)建 UI 節(jié)點->Toggle 即可創(chuàng)建 Toggle 組件。

節(jié)點說明

Toggle 組件的節(jié)點樹一般為:

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

屬性介紹

創(chuàng)建成功后,屬性面板可以看到 Toggle 組件特有的屬性,下面對這些屬性一一介紹:

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

Toggle Transition 部分

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

Color Transition

屬性 功能說明
Normal Toggle 在 Normal 狀態(tài)下的顏色。
Pressed Toggle 在 Pressed 狀態(tài)下的顏色。
Hover Toggle 在 Hover 狀態(tài)下的顏色。
Disabled Toggle 在 Disabled 狀態(tài)下的顏色。
Duration Toggle 狀態(tài)切換需要的時間間隔。

Sprite Transition

屬性 功能說明
Normal Toggle 在 Normal 狀態(tài)下的 SpriteFrame。
Pressed Toggle 在 Pressed 狀態(tài)下的 SpriteFrame。
Hover Toggle 在 Hover 狀態(tài)下的 SpriteFrame。
Disabled Toggle 在 Disabled 狀態(tài)下的 SpriteFrame。

Scale Transition

屬性 功能
Duration Toggle 狀態(tài)切換需要的時間間隔。
ZoomScale 當用戶點擊按鈕后,按鈕會縮放到一個值,這個值等于 Toggle 原始 scale * zoomScale, zoomScale 可以為負數(shù)

Toggle 點擊事件

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

通過屬性檢查器添加回調

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

1.編寫回調函數(shù)腳本:

// toggle.js
?
cc.Class({
    extends: cc.Component,
?
    properties: {
    },
?
    // LIFE-CYCLE CALLBACKS:
?
    // onLoad () {},
?
    start() {
?
    },
?
    // update (dt) {},
?
    // toggle 回調函數(shù)
    cb_toggle(toggle, customEventData) {  
        if(toggle.isChecked){
            console.log("Hello," + customEventData + "!");
        }       
    }
});

2.編寫好后將 toggle.js 掛在到 Toggle 節(jié)點下:

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

4.預覽游戲,勾選 Toggle 發(fā)現(xiàn)控制臺正常打印出剛才輸入的字符串,取消勾選 Toggle 發(fā)現(xiàn)控制臺沒有打印任何內容,說明成功調用回調函數(shù):

通過腳本添加回調

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

方法一:

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

1.編寫腳本如下:

// toggle.js
?
cc.Class({
    extends: cc.Component,
?
    properties: {
    },
?
    // LIFE-CYCLE CALLBACKS:
?
    onLoad() {
        var checkEventHandler = new cc.Component.EventHandler();
        checkEventHandler.target = this.node; // 這個 node 節(jié)點是你的事件處理代碼組件所屬的節(jié)點
        checkEventHandler.component = "toggle"
        checkEventHandler.handler = "cb_toggle";
        checkEventHandler.customEventData = "小明";
?
        var toggle = this.node.getComponent(cc.Toggle);
        toggle.checkEvents.push(checkEventHandler);
    },
?
    start() {
?
    },
?
    // update (dt) {},
?
    // toggle 回調函數(shù)
    cb_toggle(toggle, customEventData) {
        // toggle 為 toggle 本身
        if (toggle.isChecked) {
            console.log("Hello," + customEventData + "!");
        }
    }
});

2.編寫好后將 toggle.js 掛在到 Toggle 節(jié)點下,預覽游戲,勾選 Toggle 發(fā)現(xiàn)控制臺正常打印出剛才輸入的字符串,取消勾選 Toggle 發(fā)現(xiàn)控制臺沒有打印任何內容,說明成功調用回調函數(shù):

方法二:

通過 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 回調函數(shù)
    cb_toggle(toggle) {
        // toggle 為 toggle 本身
        if (toggle.isChecked) {
            console.log("Hello,小明!");
        }
    }
});

2.編寫好后將 toggle.js 掛在到 Toggle 節(jié)點下,預覽游戲,勾選 Toggle 發(fā)現(xiàn)控制臺正常打印出剛才輸入的字符串,取消勾選 Toggle 發(fā)現(xiàn)控制臺沒有打印任何內容,說明成功調用回調函數(shù):

拓展:

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


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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容