节点系统事件TOUCH_MOVE回调双指操作抖动严重?

测试代码很简单:

this.canvas.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMoveCallback, this, true)

onTouchMoveCallback(event:cc.Event.EventTouch) {
let touches = event.getTouches();
if (touches.length >= 2) {
console.error(“双指操作”)
}else{
console.error(“单指操作”)
}
}

结果是两指手指操作的时候,单指操作log也有非常多。

请问这是正常的吗?这样的话,如果有双指操作缩放需求的话,需要做很多防止抖动判定逻辑

我也发现这个问题了,双指操作的时候,被迫取消镜头放大缩小功能

这个可以做 我也准备做双指放大缩小的功能 当我一个手指1按下 不再做任何动作 手指2在动的时候 本应该是双指操作的 但是touches.length是为1的 这没问题 我有一个解决方案

声明一个空对象 在TOUCH_START里实时添加手指1的touchID 和 手指2的touchID TOUCH_END里面实时删除手指1的touchID 和 手指2的touchID 直接判断空对象的key有多少个就可以解决这个问题了

demo来了 代码写的有点烂 勿喷
双指缩放.zip (2.9 MB)

怎么说,稍微有点问题啊,双指滑动太快了,直接跑偏了

这个相机双指缩放问题解决了么

这个问题解决了么,双指捏合,疯狂闪动

看了一下,想法是不错的,不过还有会有问题1.双指移动的时候,单手有时是首先触发的

2.有时手指离开事件不触发,导致双指完成后,单指却无法移动了,因为end事件没有触发,无法删除对象的属性,必须要双指继续捏合,双指离开后,end触发后,单指才可以继续移动

我更换了一个简单的做法

let isTouchMove: boolean = false;
    this.canvas.on(cc.Node.EventType.TOUCH_MOVE, (e: cc.Event.EventTouch) => {
        let touches = e.getTouches();
        switch (touches.length) {
            case 1:
                if (this.isTouchMove) { return } //用标记的好处在于,单指失效的时候,第二次就可以继续移动
                this.rightDrag(e)
                console.log("单手移动")
                break;
            case 2:
                this.isTouchMove = true
                console.log("双手捏合逻辑")
                break;
        }
    })
    // 监听手指离开手机屏幕
    this.canvas.on(cc.Node.EventType.TOUCH_END, (e: cc.Event.EventTouch) => {
   
        this.isTouchMove = false
    });
只要发送过双指事件就做一个标记,并在单指事件执行之前做好判断,手指离开就取消标记,
这样的也有一个问题,就是按下双指的时候,如果先发送单指事件,还是有有点小抖动,但是不会很频繁
1.有一个好处,就是双指加入离开屏幕,可能没有触发end事件,导致单指无法正常使用,但是再滑动第二次就可以了