JavaScript обнаружение столкновения - PullRequest
0 голосов
/ 18 июня 2019

Я хотел обнаружить столкновение, когда жест смахивания ударяет по объекту на холсте.

У меня есть два круга, 1 неподвижный, другой перемещается, когда события touchstart и touchmove запускаются при отслеживаниикоординаты x и y.

Для обнаружения столкновения я использую теорему Пифагора для вычисления расстояния между двумя окружностями:

function getDistance(circle1x, circle1y, circle2x, circle2y) {
    let xDistance = circle1x - circle2x;
    let yDistance = circle1y - circle2y;

    return Math.sqrt((xDistance * xDistance) + (yDistance * yDistance));
}

Когда радиусы обеих окружностейдобавлено больше, чем расстояние, тогда должно быть столкновение:

if(getDistance(circle1.x, circle1.y, circle2.x, circle2.y) < circle1.radius + circle2.radius) {
    // collision
}

Но это не всегда работает, особенно если радиусы обоих кругов малы (то, что я тестировал, составляет 25 пикселей и ниже, но это, вероятно, происходит навсе, что меньше 50% вашего экрана)Когда я регистрировал событие touchmove, я заметил, что его координаты иногда не попадают в объект.Иногда, когда вы проводите слишком быстро, координаты просто перепрыгивают через объект.Я прочитал на w3.org , где написано:

Обратите внимание, что скорость, с которой пользовательский агент отправляет события touchmove, определяется реализацией и может зависеть от аппаратных возможностей и других реализаций.детали.

Так как же справиться с коллизией с помощью касания?

...