游戏功能基本已经做完了,但是策划需要加一个 点击屏幕任何地方的点击反馈特效
= = 我不可能在问所有已经写好的脚本里面的触摸事件里面挨个去添加
我最开始想的是在界面的最上层加一个满屏幕的节点进行触摸监听 但是这会导致我游戏其他触摸被阻挡
所以想问一下有没有全局监听的触摸事件 button 和 cc.Node.on 的触摸事件都可以接收到的
游戏功能基本已经做完了,但是策划需要加一个 点击屏幕任何地方的点击反馈特效
= = 我不可能在问所有已经写好的脚本里面的触摸事件里面挨个去添加
我最开始想的是在界面的最上层加一个满屏幕的节点进行触摸监听 但是这会导致我游戏其他触摸被阻挡
所以想问一下有没有全局监听的触摸事件 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/这个地方/);
感谢,学到了