Цитата:
|
Я не могу знать какой объект окажется на пути пули, они все движутся.
|
Зато можете знать, какой объект был на пути пули между предыдущим и текущим тиком.
1. Любая прямая описывается функцией y = k*x + b
2. Находим k и b для прямой, по которой летит пуля, решив систему уравнений:
yPast == k*xPast + b && yNow == k*xNow + b
3. Аналогично находим k и b для прямой, по которой движется враг
4. Ищем координаты пересечения прямых:
y == kBullet*x + bBullet && y == kEnemy*x + bEnemy
5. Проверяем, принадлежит ли точка пересечения к отрезкам, которые враг и пуля прошли за 1 тик:
(x между xBulletPast и xBulletNow) && (y между yBulletPast и yBulletNow) && (аналогично для enemy)
На этом в принципе можно и остановиться, но если пули летают ОЧЕНЬ быстро, то можно продолжить:
6. Вычисляем соотношение, в котором точка пересечения делит отрезок пули
7. Через это соотношение получаем точку на отрезке врага
8. Ставим пулю на точку пересечения отрезков, а врага - на только что вычисленную точку
9. Проверяем на столкновение.