【问题标题】:Handling Multi-Touch events in Emscripten in Safari在 Safari 中处理 Emscripten 中的多点触控事件
【发布时间】:2018-09-10 21:42:15
【问题描述】:

我正在使用 Emscripten 获得许多在 HTML5 下运行的 C++ 游戏。客户端要求这些游戏也可以在移动网络浏览器中运行,他们不想制作原生应用。

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

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

提前谢谢你。

【问题讨论】:

    标签: multi-touch emscripten


    【解决方案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 平台上的多点触控。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多