Pixijs(3.0.8)支持多点触控,如演示中所示,我已设置start
,move
和end
听众,以便在我的手机上进行触控设备
触摸被注册在画布中的一个正方形上,我称之为interactiveArea
,但是当我们离开该区域时触发了touchend事件。这种行为适用于单个鼠标光标。
然而,当使用更多手指时,使用标识符0
,1
和2
进行触摸时,只会在区域外触发第一个touchEnd。
所以我在interactiveArea
内按住3个手指并将它们全部移到它外面。然后我放开1
,然后放开其他人。我没有收到有关事件0和2的touchEnds的通知,而且我必须重新注册3次触摸并正确放手以获得触发2
的触摸!
关于我如何能够检测到所有头衔的任何提示,而不是让它在第一次触发时停止?我也试过使用setTimeout hack,但这确实不适合我的用例。
编辑我已经制作了一个基本的codepen来演示touchendoutside
仅触发一次的方式。 https://codepen.io/Thomaswithaar/pen/EygRjM请在移动设备上访问笔,因为它是关于触摸而不是鼠标交互。
将两根手指放在红色方块上,然后将它们移出并放开只会触发一个 touchendoutside
事件。
答案 0 :(得分:1)
查看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 );
}
}
};
您可以在else语句中看到touchendoutside
为真时调度displayObject._touchDown
事件。但是在释放第一根手指后,它会将标志设置为false。这就是为什么你只收到一次这个事件。
我在这里开了一个问题: https://github.com/pixijs/pixi.js/issues/2662
并提供了一个解决方案: https://github.com/karmacon/pixi.js/blob/master/src/interaction/InteractionManager.js 此解决方案删除标志并使用计数器。我还没有测试过,所以请告诉我它是否有效。