1. 程式人生 > >cocos新手引導的遮罩元件

cocos新手引導的遮罩元件

首先先明確下需求,新手引導一般會遮蔽了除期望操作元件之外的所有ui的操作。也就是說,除了指定的元件,你不可以點選其他的元件。然後直接上程式碼吧:

cc.Class({
    extends: cc.Component,

    properties: {
        targetNodePath: ''
    },

    onLoad () {
        let touchListener = cc.EventListener.create({
            event: cc.EventListener.TOUCH_ONE_BY_ONE,
            swallowTouches: true,
            owner: this.node,
            onTouchBegan: (touch, event)=>{
                const node = cc.find(this.targetNodePath);
                if(!(node && cc.isValid(node))){
                    console.warn("can't find node by path:", this.targetNodePath);
                    return false;
                }
                const box = node.getBoundingBoxToWorld();
                return !box.contains(touch.getLocation());
            }
        });
        cc.eventManager.addListener(touchListener, this.node);
    }

});

基本思路就是在最上層監聽TOUCH_BEGAN事件,並且指定放行的元件路徑(使用路徑而不是節點是為了方便讀取配置表),遮蔽除指定元件之外的ui。以上程式碼僅能在creator 1.x上執行,因為使用了eventManager,在2.x中將會被移除。目前專案使用1.9.3,計劃升級1.10,因此暫無問題。 那麼我們思考下在2.x中,這個介面被移除了,我們因該如何處理呢。我想了下,其實也很好解決。以下是我的思路(懶得寫程式碼了):

  • 首先在最上層用一個Button或者BlockInputEvent元件遮蔽所有的使用者輸入
  • 然後指定放行的元件,在遮罩上方同位置建立一個等大小的button,執行對應元件的Component.EventHandler,至於縮放什麼的表現可能需要自己手動弄個動畫了,想來也是很方便的