对话框是什么,大家应该比较清楚。模态对话框就是当前对话框出现的时候不能对当前对话框以外的元素进行操作的一种对话框。
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;
};
_