遇到问题:在使用双指放缩的时候屏幕会不停的抽搐闪动
环境:LayaBox下的panel,panel上下可滚动
发现:在事件触发的时候打出日志,发现触发了2次按下事件,2次的touch的list不一样,长度分别为1,2;
解决:
再第二个手指触碰的时候解除监听精灵的单指触碰的所有事件,
2根手指触碰的时候必定会有先后顺序,在第一个手指触碰到屏幕的时候就会触发panel的滚动事件,当第2个手指再触碰的时候再次触发屏幕放缩事件,所以就要在双指触碰的时候就要解除那个精灵单指触碰的所有事件。
但是因为不知道panel滚动监听的是什么事件,所以自己就写了一个类似panel的左右滚动事件,具体如下:
var tempX:number = this.bgsmallImg.x;
var tempY:number = this.bgsmallImg.y;
tempX += ex-this._cx;
tempY += ey-this._cy;
if(tempX>this.landLayer.hScrollBar.value){//最大是0,滚动到最左边,最靠左边
tempX=this.landLayer.hScrollBar.value;
}
var maxWidth:number = this.bgsmallImg.width*this.bgsmallImg.scaleX-this.width-this.landLayer.hScrollBar.value;//this.bgsmallImg.width滚动对象的宽度*放缩倍速-滚动屏幕宽度-panel滚动的x轴距离
if(tempX<-maxWidth){//x小于最大滚动距离
tempX=-maxWidth;
}
if(tempY>-this.landLayer.vScrollBar.value){
tempY=this.landLayer.vScrollBar.value;
}
var maxHeight:number = this.bgsmallImg.height*this.bgsmallImg.scaleY-this.height-this.landLayer.vScrollBar.value;
if(tempY<-maxHeight){
tempY=-maxHeight;
}
this.bgsmallImg.x = tempX;
this.bgsmallImg.y = tempY;
写出滚动事件之后,就没什么问题了,在双指触发的时候解除滚动事件,双指事件解除的时候就添加回来。
根据上面同理,3指触控 n指触控都是这样,先解除 n-1之前的事件(此处在绑定事件的时候处理一下,解除的时候采用递归就可以了)
当然,也可以声明 全局变量 来禁止事件的执行,但是这个依然会执行1次不想要的事件,比如双指事件用全局变量禁止,依然会执行1次单指事件,并且派发出事件
小白一枚,由于之前不太了解那个事件的机制所以这里就进坑了。大家有什么更好的办法吗?