zoukankan      html  css  js  c++  java
  • cocos2d-x JS 弹出对话框触摸监听(吞噬点击事件遮挡层)

    在游戏中,我们经常会碰到一些弹窗,这些弹窗禁止点透,也就是禁止触摸事件传递到底层,我们称之为遮挡层,这些遮挡层,需要开发遮挡层,我们首先得了解cocos2d-js的触摸传递机制。

    根据官方文档,我们可以得知,触摸方式有五种,但是根据需求,我们需要做的是拦截触摸监听。

    所以我们简单封装了这么一个类,如下所示:

    cc.ModelLayerColor = cc.LayerColor.extend({
    	m_touchListener:null,
    	ctor:function(){
    		this._super();
    		var touchListener = {
    			event: cc.EventListener.TOUCH_ONE_BY_ONE,
    			swallowTouches: true,
    			onTouchBegan: this.onTouchBegan
    		};
    		cc.eventManager.addListener(touchListener, this);
    		this.m_touchListener = touchListener;
    	},
    	onTouchBegan:function(touch, event) {
    		var target = event.getCurrentTarget();
    		if(!target.isVisible() || (!this.isTouchInside(target,touch))){
    			return false;
    		}
    		return true;
    	},
    	isTouchInside: function (owner,touch) {
    		if(!owner || !owner.getParent()){
    			return false;
    		}
    		var touchLocation = touch.getLocation(); // Get the touch position
    		touchLocation = owner.getParent().convertToNodeSpace(touchLocation);
    		return cc.rectContainsPoint(owner.getBoundingBox(), touchLocation);
    	}
    });
    这里要把swallowTouches设置为true,这样onTouchBegan返回true才能够吞噬触摸,不继续往优先级更低的层传递,从而实现遮挡层。
    
     
  • 相关阅读:
    min25筛学习笔记
    【模板】回滚莫队&不删除莫队
    UOJ#188. 【UR #13】Sanrd
    LOJ#572. 「LibreOJ Round #11」Misaka Network 与求和
    Product
    Lcm
    点是否在三角形内的判断
    今天学会了 在Linux下,用GCC编译C语言程序,mark下
    让你沉迷的五种设计
    搞清楚了自发光特效的制作原理,3张图,3个步骤
  • 原文地址:https://www.cnblogs.com/luorende/p/6569375.html
Copyright © 2011-2022 走看看