![]() |
|
||||||||||
|
|||||
|
strange mood
|
Цитата:
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. Проверяем на столкновение.
__________________
тонкий тролль, осеянный благодатью |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 42
|
Может попробовать по таймеру двигать и просчитывать? Так можно хоть каждую миллисекунду делать проверки.
|
|
|||||
|
Gaen, мне кажется там нужно измерять время движения пули и оъекта до точки столкновения. И если оно с определенным приблежением одинаково, то фиксировать столкновения. А так даже внутри одного тика зрительно пуля может пролетать мимо врага. Все много проще если враги медленнее пули, а если наш перс попал в бушующее астероидное поле. Короче, во многих случаях решение Bgg было бы исчерпывающим.
__________________
Мой профиль на фрилансе |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 461
|
Самый правильный вариант это то что написал derhab, проверять математически. Например: пуля летит и куча юнитов которые перемещаются во время полета пули, у тебя есть промежуток между точками проверки столкновения, и ты боишься что юнит окажеться между двумя точками. Но ты можешь в каждую итерацию считать вектор полета где начало - предыдущая точка, а конец - текущая точка и смотреть не было ли столкновения.
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 1
|
Можно совсем извращенным путем. На онФрейме каждый раз продвигать попиксельно циклом, проверяя столкновения.
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 2
|
Цитата:
yPast = 10 xPast = 10 yNow = 30 xNow = 10 как быть тогда? |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
1 использовать детектор столкновений из физического двига.
2 каждый фрейм сравнивать пересечение не с пулей, а с отрезком, который пуля пролетает. Пункт 2 тебе тут как раз пытаются расписать подробнее. |
|
|||||
|
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Цитата:
__________________
Отряд Котовскага |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 100
|
Нет конечно, просто там всё уже готовое, останется просто "выдрать" детектор и привязать его к своему коду. Не надо будет заморачиваться над математикой.
|
|
|||||
|
Регистрация: Jun 2010
Сообщений: 153
|
Вот тебе самый простой способ!
И так у тебя есть пуля! её скорость движения 100п верно? Решения проблемы: создаем пустой мувиклип в нем пулю и еще один объект длиной 100пикселей (невидимый! (visible=false; или просто шириной 0.1)) двигаем пулю по 100пикселей и невидимый объект и если у нас есть тихтест врага с невидимым объектом то удаляем мувиклип в котором пуля и невидимым объект! вот и все! |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|