Книги
чёрным по белому
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Книги
Археология Архитектура Бизнес Биология Ветеринария Военная промышленность География Геология Гороскоп Дизайн Журналы Инженерия Информационные ресурсы Искусство История Компьютерная литература Криптология Кулинария Культура Лингвистика Математика Медицина Менеджмент Металлургия Минералогия Музыка Научная литература Нумизматика Образование Охота Педагогика Политика Промышленные производства Психология Путеводители Религия Рыбалка Садоводство Саморазвитие Семиотика Социология Спорт Столярное дело Строительство Техника Туризм Фантастика Физика Футурология Химия Художественная литература Экология Экономика Электроника Энергетика Этика Юриспруденция
Новые книги
Цуканов Б.И. "Время в психике человека" (Медицина)

Суворов С. "Танк Т-64. Первенец танков 2-го поколения " (Военная промышленность)

Нестеров В.А. "Основы проэктирования ракет класса воздух- воздух и авиационных катапульных установок для них" (Военная промышленность)

Фогль Б. "101 вопрос, который задала бы ваша кошка своему ветеринару если бы умела говорить" (Ветеринария)

Яблоков Н.П. "Криминалистика" (Юриспруденция)
Реклама

Секреты разработки игр в Macromedia Flash MX - Макар Дж.

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 210 >> Следующая

обнаружения столкновения. Для начала необходимо осознать, что мы можем
по-прежнему лишь проверять на столкновение в каждом кадре, - мы не можем
делать проверку между кадрами. Что именно мы рассмотрим здесь, так это
как сообщить, должно ли произойти столкновение между кадрами. В гл. 4,
"Основы физики", мы ввели уравнение для положения объекта и его векторной
скорости. В гл. 3, "Тригонометрия 101", мы вывели, как найти расстояние
между двумя точками. Если мы знаем скорости по х и у для каждой
окружности (с которой работаем), то мы можем написать уравнение, которое
определяет координаты * и у каждой окружности. С этими уравнениями
координат мы можем написать уравнение, которое определяет расстояние
между двумя окружностями. Мы ос-' таемся с уравнениями для расстояния
между двумя окружностями, которые зависят от одной переменной - времени
(ладно, хорошо, для нас это в действительности кадры). Если бы мы
захотели, мы могли бы зафиксировать любой момент времени в этом уравнении
и найти расстояние, на котором окружности находились бы друг от друга в
этот момент. Аналогично мы могли бы фиксировать расстояние и затем решить
уравнение для нахождения времени, когда две окружности будут находиться
на этом расстоянии. Сейчас нас интересует послед-
I лава 5. Обнаружение столкновений
107
пнй случай. То же основное условие должно быть удовлетворено для
столкновения двух окружностей: расстояние между двумя окружностями должно
быть Меньше суммы или равно сумме их радиусов. Поэтому мы делаем
следующее:
1 Записываем уравнения для координат х и у обеих окружностей. Эти
уравнения основаны на скоростях х и у.
2 Используем уравнения для координат х и у для обеих окружностей для
записи уравнения расстояния между двумя окружностями.
3. В уравнении расстояния используем сумму их радиусов для расстояния
и решаем по времени (которое выражается в кадрах).
1. Делаем это в каждом кадре. Если время меньше или равно 1, то
столкновение произошло между последним кадром и текущим кадром.
Давайте посмотрим на это в математической форме, прежде чем перейти к
ActionScript.
1. Для окружности 1:
xl =xll+xmovl*t yl =yll+ymovl*t
Для окружности 2:
х2 =xl2+xmov2*t у2 =yl2+ymov2*t
Переменные х11, yl1, х12 и у!2 представляют координаты окружности в конце
предыдущего кадра (поскольку мы еще не обновили этот кадр). Переменная I
стоит в "конце", как в "последнем кадре". Переменная t представляет время
от начала до конца предыдущего кадра.
2. Расстояние между двумя окружностями: distance = д/(х2 - xl) 2 + (у2
- yl)2
3. Установить расстояние как сумму радиусов и решить по времени:
distance =radiusl + radius2 = -д/(х2 - xl) 2 + (у2 - yl) 2
Решение уравнения по времени очень трудоемко. Мы должны вставить
уравнения для х1, у1,х2 и у2. Затем мы возводим в квадрат обе части
уравнения (чтобы избавиться от знака квадратного корня). То, что у нас
слева, - это квадратное vравнение. Квадратные уравнения имеют два
решения, которые означают,
108
Часть 2. Исследование основ
что, когда мы решаем уравнение по времени-, мы получаем два ответа.
Концептуально мы должны видеть, почему в этом случае мы получаем два
различных времени. Представьте две окружности, двигающиеся по направлению
друг к другу. В первый раз они соприкоснутся краями. С течением времени
они будут! двигаться одна сквозь другую, но в тот момент, когда они будут
готовы разой тись, они соприкоснутся краями еще в одной точке снова. Два
момента времени, найденные при решении квадратного уравнения, дают нам
два момента времени, когда может произойти столкновение. Когда мы имеем
наши два ответа, мы смотрим, какое время меньше по величине, и
отбрасываем второе значение. Определяя эти константы,
R =radiusl+radius2 а =-2 *xmovl*xmov2 +xmovl2+xmov22
b =-2*xll*xmov2-2*xl2*xmovl+2*xll*xmovl+2< xl2*xmov2 с =-
2*xll*xl2+xll"+xl2' d =-2*ymovl*ymov2+ymovl2+ymov22
e =-2*yll*ymov2-2*yl2*ymovl+2*yll*ymovl+2*yl2*ymov2 f =-
2*yll*yl2+yll2+yl22 g =a + d h =b + e k =c+f-R2
мы можем записать квадратное уравнение в упрощенной форме как g*t4h*t + k
^0
Используя формулу квадратов для решения по времени, мы приходим к
- h + Jh2 - 4 * g * k - h - Jh2 - 4 * g * k
tl = ------------------- и 12 = -------------2---
2 * g 2 * g
4. Это вычисление производится в каждом кадре. Если любой из моментов
времени меньше или равен 1, то столкновение произошло между предыдущим
кадром и текущим кадром. Это работает для любой возможной скорости;
ограничений нет.
Если вы интересуетесь более строгой математикой этого процесса,
посмотрите файл circ_circ_frame_independent.pdf в папке Chapter05 на CD,
Там показано, как это реализовано вручную.
лава 5. Обнаружение столкновений
109
Решение квадратных уравнений
Любое уравнение, в котором переменная имеет степень 2 (и нет других
выражений с более высокой степенью), является квадратным уравнением.
Например, a*t2+b*t+c = 0 является квадратным уравнением. Все квадратные
уравнения имеют два решения; это означает, что существуют два значения
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 210 >> Следующая