pixijs(3.0.8)支持多点触摸,如其演示中所示,我已经设置了start
,move
和end
听众,以触摸我的移动设备。
触摸是在画布内的一个正方形上注册的,我将称为interactiveArea
,但是当触摸端事件也触发时,也可以触发该区域外。这是与单个鼠标光标正常工作的行为。
但是,当使用更多的手指时,使用标识符0
,1
和2
触摸时,只有第一个接触端在该区域外触发。因此,我按住interactiveArea
内的3个手指,然后将它们全部移到其外面。然后,我放开了1
,然后放开其他人。我不会收到事件0和2的接触端的通知,我必须重新注册3次触摸,并正确放开,只是为了获得2
触发的触摸端!
关于我如何检测所有接触端的任何提示,而不是在第一个接触端上停止?我也尝试使用Settimeout Hack,但这确实不适合我的用例。
edit 我做了一个基本的代码词,以演示如何仅触发touchendoutside
。https://codepen.io/thomaswithaar/pen/eygrjm确实访问了手机上的笔,因为它是关于触摸而不是鼠标交互性的。将两个手指握在红色正方形上,然后将它们移开并放开,只会触发一个 touchendoutside
事件。
查看pixi源代码,交互管理器中确实有一个错误。这是处理触摸最终事件的方法:
InteractionManager.prototype.processTouchEnd = function ( displayObject, hit )
{
if(hit)
{
this.dispatchEvent( displayObject, 'touchend', this.eventData );
if( displayObject._touchDown )
{
displayObject._touchDown = false;
this.dispatchEvent( displayObject, 'tap', this.eventData );
}
}
else
{
if( displayObject._touchDown )
{
displayObject._touchDown = false;
this.dispatchEvent( displayObject, 'touchendoutside', this.eventData );
}
}
};
您可以在其他语句中看到touchendoutside
事件在displayObject._touchDown
为true时被派发。但是,释放第一根手指后,它将标志设置为false。这就是为什么您只收到一次活动。
我在这里开了一个问题:https://github.com/pixijs/pixi.js/issues/2662
并在此处提供了一个修复程序:https://github.com/karmacon/pixi.js/blob/master/src/interaction/interaction/interactionmanager.js该解决方案卸下标志并使用计数器。我还没有测试过,所以请让我知道它是否有效。