Показать сообщение отдельно
Старый 05.09.2011, 00:59
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 11  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
Я не могу знать какой объект окажется на пути пули, они все движутся.
Зато можете знать, какой объект был на пути пули между предыдущим и текущим тиком.

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. Проверяем на столкновение.
__________________
тонкий тролль, осеянный благодатью