新手求帮助!!(物理弹球)触摸事件中可以获取触摸点击时长吗?

 物理弹球中,如果手指不移动时会锁定小球发射辅助线,达到精准射击的功能,希望实现同样的功能。

onTouchMove( )里面没有按压触摸时长?点击移动后,当手指不移动时,如何判断这个不移动时的时间长短?这个要如何实现?

在update里自己计时,每次移动完之后时间置为零并开始计时,达到一定时间之后触发你要的效果,并且停止计时

您说的移动完之后,是不是手指也抬起了?如果手指不抬起,还是在onTouchMove函数里面,只是手指不移动了,如果获取手指不移动呢?通过坐标还是什么方法?

通过坐标的话,官方给的只有当前的坐标,和上一次坐标。如果我不移动,根本没有办法获得当前的新的坐标。您这有什么更好的办法吗?

自己写一个计时器touchmove状态开启计时

监听到 touchmove 函数移动时重置计时器

要灵活处理哈,每一次onTouchMove的时候都重新把时间置零计时,一旦时间达到了设定的值之后,状态设置为瞄准模式,进行你的瞄准逻辑,这个时候如果onTouchMove再回调,是可以判断当前是否是瞄准状态,从而跳出这个回调,或者调整你的瞄准射线。onTouchEnd的时候就把计时停止掉,状态设置为非瞄准模式。我这个只是提供了个参考,因为我不清楚你要实现的效果到底是什么,具体操作要灵活处理哈。

ontouchmove:function(){
this.isMove = true;
this.index++;
this.time =0;
console.log(“move了开始调用计时器”+this.index);
var interval = 0.001; //计时器调用间隔时间
var repeat = 3; //重复次数
var delay = 2; //开始延时
this.schedule(this.countTime,interval);
},
ontouchend:function(){
this.unschedule(this.countTime);// console.log(“end后取消计时器”);
this.isMove = false;
console.log(“this.isMove 在end触摸中的状态”+this.isMove);
},
countTime:function(){
this.time++
console.log(“开始计时this.time”+this.time);
if(this.time >= 40){
console.log(“time停留了40下判断手指不移动”+this.time);
this.isMove = false;
}
},
update:function(dt){
if(this.isMove == true){
this.red.active = true;
}else {
this.red.active = false;
}
}

谢谢大家,根据你们的思路我用这种方法写出来了,实现了初步的想法

你这样写schedule会调起很多次,而unschedule只会调起一次,会导致开启很多计时器,而只能关掉掉一个

用这个unscheduleAllCallbacks,可以吗?取消所有的计时器

可以是可以,但是最好是在schedule之前也调一次unscheduleAllCallbacks,确保同一个时间只有一个计时器

好的,谢谢:ok_hand: