有全局的屏幕触碰监听事件吗

游戏功能基本已经做完了,但是策划需要加一个 点击屏幕任何地方的点击反馈特效

= = 我不可能在问所有已经写好的脚本里面的触摸事件里面挨个去添加

我最开始想的是在界面的最上层加一个满屏幕的节点进行触摸监听 但是这会导致我游戏其他触摸被阻挡

所以想问一下有没有全局监听的触摸事件 button 和 cc.Node.on 的触摸事件都可以接收到的

在你游戏最上层界面放个全屏空节点

this.node.on(cc.Node.EventType.TOUCH_START, (event: cc.Touch) => {
//播放特效
});

this.node._touchListener.setSwallowTouches(false);

多谢 可用

this.node._touchListener.setSwallowTouches(false);
2.4.10这行代码运行会报错,大佬怎么解决

昨天刚做的点击反馈/** 点击反馈*/
const { ccclass, property } = cc._decorator;

@ccclass
export default class FeedBackTouch extends cc.Component {
private pbPool: cc.NodePool = null;

onLoad() {
    this.pbPool = new cc.NodePool("feedback");//使用对象池
}

start() { }

onEnable() {
    this.node.on(cc.Node.EventType.TOUCH_START, this._onTouchBegin, this);
    this.node.on(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this);
    this.node.on(cc.Node.EventType.TOUCH_END, this._onTouchEnd, this);
    this.node.on(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this);
    this.node["_touchListener"].setSwallowTouches(false);
}

onDisable() {
    this.node.off(cc.Node.EventType.TOUCH_START, this._onTouchBegin, this);
    this.node.off(cc.Node.EventType.TOUCH_MOVE, this._onTouchMoved, this);
    this.node.off(cc.Node.EventType.TOUCH_END, this._onTouchEnd, this);
    this.node.off(cc.Node.EventType.TOUCH_CANCEL, this._onTouchCancel, this);
}

_onTouchBegin(event) { }

_onTouchMoved(event) { }

_onTouchEnd(event) {
    let temp = event.getLocation();
    let pos = this.node.convertToNodeSpaceAR(temp)
    let pb = this.createObject();
    let node = be.instantiate(pb, this.node);
    let ani = node.getComponent(cc.Animation)
    node.position = pos;
    ani.play("feedbackAni");
    ani.once("finished", () => { this.pbPool.put(node); })
}

createObject() {
    if (this.pbPool) {
        if (this.pbPool.size() > 0) {
            return this.pbPool.get();
        } else {
            return gs.UI.loadPrefabSync("common/ani/feedback");
        }
    } else {
        return gs.UI.loadPrefabSync("common/ani/feedback");
    }
}

_onTouchCancel(event) { }

onDestroy() {
    this.pbPool && this.pbPool.clear();
}

}

_touchListener是不暴露的属性,你用中括号或者上面加个“// @ts-ignore”都行;不过有更简单的,使用捕获,给UI层根节点或者Canvas所处的节点添加监听即可,不需要在最上层单独添加节点(楼主的方法是穿透,需要最顶层加个全屏的空节点):
this.node.on(cc.Node.EventType.TOUCH_START, (event: cc.Touch) => {
console.log(‘优先触发’);
}, null, true/这个地方/);

1赞

感谢,学到了