Примечание: * Полный JSFiddle можно найти в нижней части моего сообщения *.
Проблема: Я пытаюсь уничтожить всех врагов, которые касаются синей линии в центре холста. Однако это не так, и моя реализация только "наполовину работает". Когда одна сторона работает, другая не делает. Как я могу исправить эту проблему?
То, что я пробовал:. Когда я настраивал основные функции рисования, я вычислил разницу между x и y сталкивающихся объектов. Использовал пифагорейское расстояние, чтобы вычислить расстояние между двумя точками. Наконец, проверьте, меньше или равно расстояние, равное объединенному радиусу двух объектов. Используя арктангенс, я вычислил вращение движения объектов.
Альтернативное решение, о котором я думал:. Использование цикла для создания различных невидимых кругов или точек вдоль синей линии, которые действуют как рецептор столкновения. Проблема в том, что она ест больше ресурсов, и она не будет элегантной вообще.
Функция Javascript, представляющая для вас наибольший интерес, будет:
function (player, spawn) {
return (this.distance(player, spawn) <= player.radius + spawn.radius) && (this.tangent(player, spawn) <= angle - Math.PI * 1);
}
Угол представляет собой угол вращающейся синей линии (который представляет собой полукруг с стоком).
this.tangent(player, spawn) <= angle - Math.PI * 1)
Это работает только для секций - и + -. Изменение <= to >= делает противоположное, как ожидалось. Мне нужно было бы найти способ цикла от -1 до 1.
this.tangent(player, spawn) >= angle - Math.PI * 2 && this.tangent(player, spawn) >= angle
работает для -, - +, ++, но не для + - (внизу справа).
Итак, в конце концов я совершенно смущен, почему моя логика не работает, но я очень хочу узнать, как это можно достичь:
Ниже JSFiddle:
Я был бы рад за ответ, поскольку я люблю изучать новые вещи в Javascript:)
Изменить (03.11.2015): Если возможно, только чисто математические решения, но вы также можете публиковать другие решения. Для того, чтобы изучать новые методы, каждый фрагмент информации приветствуется.