在Safari中处理Emscripten中的Multi-Touch事件

问题描述 投票:1回答:1

我正在使用Emscripten来获得在HTML5下运行的大量C ++游戏。客户要求这些游戏也在移动网络浏览器中运行,他们不想制作本机应用程序。

游戏要求我正确处理多点触控事件 - 如果用户将三根手指放到屏幕上,我必须对所有三根手指作出相应的反应。但是,我在iPad Mini上测试Safari时遇到了一个问题,我预计它也会在其他地方发生(尽管到目前为止我还没有在Android上看到它)。

我发现的是,当触发回调时,例如,如果我通过emscripten_set_touchend_callback设置回调,那么每当发生touchend事件时,该回调都会被EmscriptenTouchEvent中包含的所有活动接触点击中。因此,我不知道该事件适用于哪个接触点。例如,如果三个手指向下,并且您抬起第二个手指,则所有三个接触点都将传递给touchend回调。有没有办法确定touchend事件适用于哪个接触点?如果这是一个错误,是否有一个已知的解决方法?

先感谢您。

multi-touch emscripten
1个回答
1
投票

好的,经过一些研究后我在这个网站上找到了一个解决方案:

https://github.com/kripken/emscripten/issues/5012

他们建议您在Emscripten代码中编辑library_html5.js并更改:

    var touches = {};
    for(var i = 0; i < e.touches.length; ++i) {
      var touch = e.touches[i];
      touches[touch.identifier] = touch;
    }
    for(var i = 0; i < e.changedTouches.length; ++i) {
      var touch = e.changedTouches[i];
      touches[touch.identifier] = touch;
      touch.changed = true;
    }

有了这个:

    var touches = {};
    for(var i = 0; i < e.touches.length; ++i) {
      var touch = e.touches[i];
      touches[touch.identifier] = touch;
      touch.changed = 0;
    }
    for(var i = 0; i < e.changedTouches.length; ++i) {
      var touch = e.changedTouches[i];
      touches[touch.identifier] = touch;
      touch.changed = 1;
    }

我应用了更改,并确认它修复了iOS平台上的多点触控。

© www.soinside.com 2019 - 2024. All rights reserved.