cocos新手引導的遮罩元件
阿新 • • 發佈:2018-11-25
首先先明確下需求,新手引導一般會遮蔽了除期望操作元件之外的所有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,至於縮放什麼的表現可能需要自己手動弄個動畫了,想來也是很方便的