Обработка событий Multi-Touch в Emscripten в Safari - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Emscripten для запуска ряда игр C ++, работающих под HTML5.Клиент требует, чтобы эти игры также запускались в мобильном веб-браузере, они не хотят создавать собственное приложение.

Игры требуют, чтобы я правильно обрабатывал события мультитач - если пользователь прикладывает три пальца к экрану,Я должен реагировать соответственно на все три пальца.Однако при тестировании Safari на iPad Mini возникает проблема, и я ожидаю, что это произойдет и в других местах (хотя пока я не вижу ее на Android).

Что я нахожузаключается в том, что при нажатии сенсорного обратного вызова, например, если я установил обратный вызов через emscripten_set_touchend_callback, то всякий раз, когда происходит событие касания, этот обратный вызов срабатывает со всеми активными контактными точками, включенными в EmscriptenTouchEvent.Таким образом, я не знаю, к какой точке касания относится событие.Например, если три пальца опущены, а вы подняли второй палец, все три точки касания передаются обратному вызову кассового набора.Есть ли способ для меня определить, к какой точке касания относится событие касания?Если это ошибка, есть ли известный обходной путь?

Заранее спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Хорошо, после некоторых исследований я нашел решение на этом сайте:

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

Они предлагают вам отредактировать library_html5.js в коде Emscripten и изменить:

    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.

...