creator 各平台监听屏幕按下操作

  • Creator 版本:2.3.3

  • 目标平台: / iOS / Android / Web

有一个需求,在用户按下屏幕的时候需要做一个反馈(比如播放声音),有什么好的处理方式吗?

屏幕添加触摸事件啊

有参考例子吗?

这个挺简单的,随便建个空节点node,大小等同于Canvas的大小
node. on(‘touchstart’,function ( event ) {
//播放音效
});

这是官方文档
https://docs.cocos.com/creator/manual/zh/scripting/events.html

节点添加事件可以实现某个节点的监听。
但我需要的是所有节点点击后都有反馈,这个我就不知道如何处理了。总不能所有节点加一遍吧:joy:

意思是所有点击功能实现了,但忘了处理反馈了?

你的问题描述的太笼统了

如果你所有节点都播同一个音效的话可是这样写试试

let prototype = cc.Node.prototype;
let dispatchEvent = prototype.dispatchEvent;
prototype.dispatchEvent = function (event) {
    if (event.type == "touchstart") {
        console.log("播放对应音效");
    }
    dispatchEvent.bind(this)(event);
}

node上注册的点击事件最终是从dispatchEvent分发的 在发之前先截断下需要的事件
PS:此代码未经测试 自己也没这样用过

1赞

多谢~我测试了下,没有问题,就是这样。

添加拦截组件的话也是会进入的

看了下屏蔽组件然后改了一下代码 之前确实没考虑到这个
// let BlockEvents = [‘touchstart’, ‘touchmove’, ‘touchend’,
// ‘mousedown’, ‘mousemove’, ‘mouseup’,
// ‘mouseenter’, ‘mouseleave’, ‘mousewheel’];
// 挑选一个不用的
let BlockEvents = ‘mousewheel’;
let prototype = cc.Node.prototype;
let dispatchEvent = prototype.dispatchEvent;
prototype.dispatchEvent = function (event) {
dispatchEvent.bind(this)(event);
if (event.type == “touchstart” && !event.target.hasEventListener(BlockEvents)) {
console.log(“播放对应音效”);
}
}
屏蔽组件是通过把所有的事件都注册了一边 然后触发直接stop 所以选择了一个mousewheel判断如果注册了这个那就认为是屏蔽组件 就不相应了 (当然 如果所有事件都真实用的到…那这个方案不可行)
PS: 代码挺丑的 暂时没想到别的好的方法 如果有好的方法可以发出来交流一下

:joy::joy:还有个,就是节点上添加的有button组件,但是没有添加回调的话也会触发

:joy: 额 button是基于node的方式实现的理论上是一样的 但添加不用这操作… 我再去看看button的源码…

这种一般就是统一方法生成预制件 icon,个别需要点击或者展示作用,:4:懒得动态添加button,直接就所有的icon自带button

:joy: 原来如此 公司来bug了 先去改bug 晚上再来看button的问题 哈哈哈

ojbk:test:

button估计没办法 默认在onEnable的时候就注册了 即使没有回掉也是一样 也就是node注册一个空的回掉方法 有回掉只是在TouchEnded的时候触发了一下