最终在测试游戏的时候碰到一个点击事件的bug 当按下一下 button 不松开时 这是在上层再添加一个遮罩层 并且这个遮罩层添加了 cc.BlockInputEvents 组件 然后点击这个遮罩层 等这个遮罩层去除以后 再松开 button 这里上个点击事件会被记录 并且不会消除 导致后续所有点击事件失效
目前已经在三台手机上测试过,均能复现 , 这一块希望引擎组能重视一下
排查发现 eventManager._currentTouch 一直存在 导致所有事件不会处理回调了 我这边是禁止多点触控的
目前想到的解决方案是 添加 cc.BlockInputEvents 的时候将该层下方注册的点击事件清理掉
// @ts-ignore
let onEnableFun = cc.BlockInputEvents.prototype.onEnable;
// @ts-ignore
cc.BlockInputEvents.prototype.onEnable = function () {
onEnableFun.call(this);
// 去除底层的事件
//@ts-ignore
let eventManager = cc.internal.eventManager;
let id = "__cc_touch_one_by_one";
eventManager._sortEventListeners(id);
var oneByOneListeners = eventManager._getListeners(id);
var sceneGraphPriorityListeners: any[] = oneByOneListeners.getSceneGraphPriorityListeners();
let clearEvent = false;
for (let k = 0; k < sceneGraphPriorityListeners.length; k++) {
let listener = sceneGraphPriorityListeners[k];
let owner: cc.Node = listener.owner;
if (owner && owner.isValid && owner != this.node) {
if (listener._claimedTouches.length > 0) {
clearEvent = true;
listener._claimedTouches.length = 0;
}
}
}
if (clearEvent) {
eventManager._clearCurTouch();
}
}
cocos creator 版本: 2.4.14
测试机型: 华为 vivo 小米
