cocos2dx 3.X 触摸吞噬功能

在cocos2dx 3.X中,创建覆盖当前场景的对话框层时,下层的触摸操作仍然会被响应。通过触摸吞噬技术,可以在对话框层拦截并阻止触摸事件传递到下层。实现方法包括创建监听器,设置`setSwallowTouches`为true,以及在`onTouchBegan`中返回true来阻止事件传播。监听器可以通过`addEventListenerWithSceneGraphPriority`添加,注意不同添加方式的优先级和移除机制差异。
摘要由CSDN通过智能技术生成

对话框是什么,大家应该比较清楚。模态对话框就是当前对话框出现的时候不能对当前对话框以外的元素进行操作的一种对话框。

cocos里面是不自带对话框的,所以需要自己制作。一般都是新建一个层,覆盖在当前场景之上。

但是这时候常常会有一个问题,就是覆盖之后,下层的点击操作依然会被相应。

这个问题我以前的做法比较naive(当然也是一种方法),就是每次把下层场景的控件都传到上层中然后 setEnable(false) 掉。但是。。。太麻烦了。


今天才知道可以在上层对话框层实现触摸吞噬,就是将所有触摸操作拦截在当前层不让其在下层有所响应。

3.X 中,因为事件处理机制的变化,需要实现一个监听器(listener)对当前层触摸操作监听并阻止其向下层传播的过程。

代码如下(一般是写在对话框层的 init 函数中)。如果在对话框层中加入,listener 需要固定在 this 上;如果在对话框下一层加入 listener 则要把对话框层的实例(也就不是 ths了)固定 listener:

	auto listener = EventListenerTouchOneByOne::create();
	listener->setSwallowTouches(true);
	listener->onTouchBegan = [](Touch* touch, Event* event)
	{
		return true;
	};
	_
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值