事件響應的優先級、stopProgapation禁止下層組件響應


cocos2d-js沒有完整的鼠標事件處理,這點比js/flash的要差一些,不過湊合着也可以用了。
一般界面編程,可以用顯示列表的Node作為監聽器的優先級,在上方的會比下方的高優先級。
而cocos2d-js沒有stopImmediatePropagation,只有stopProgapation,一旦某個監聽器中執行了stopProgapation,后續的監聽器都不會被執行。這里並沒有js/flash的冒泡概念。
 
如果在上層Node中stopProgapation,那么效果就有點像設置了swallowTouches:true,但會更靈活
 
例子:
 
界面上添加2個sprite,child1在下,child2在上。
如下的代碼,child2的監聽器優先級高,會首先執行,其中func2會先輸出,因為按順序執行,但由於stopProgapation,所以child1的監聽器不會被執行。
 
        if("touches" in cc.sys.capabilities){
            cc.eventManager.addListener({event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(){
                trace("func1");
                return true;
            }}, this.child1);
            cc.eventManager.addListener({event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(touch,event){
                trace("func2");     //按順序執行,先func2,再func3
                return true;
            }}, this.child2);
            cc.eventManager.addListener({event: cc.EventListener.TOUCH_ONE_BY_ONE, onTouchBegan: function(touch,event){
                trace("func3");
                event.stopPropagation();
                return true;
            }}, this.child2);
        }else{
            cc.eventManager.addListener({event: cc.EventListener.MOUSE, onMouseDown: function(){
                trace("func1");
            }}, this.child1);
            cc.eventManager.addListener({event: cc.EventListener.MOUSE, onMouseDown: function(event){
                trace("func2");     //按順序執行,先func2,再func3
            }}, this.child2);
            cc.eventManager.addListener({event: cc.EventListener.MOUSE, onMouseDown: function(event){
                trace("func3");
                event.stopPropagation();
            }}, this.child2);
        }

 


免責聲明!

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



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