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

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

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

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

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

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

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

3 var theta = Math.atan2(point.ymov, point.xmov);
4 //The difference between the angle of the line and
of the ball trajectory
5 var gamma = theta-tempLine.angle;
6 //modify x and у
7 var sinGamma = Math.sin(gamma);
8 var r = point.radius/sinGamma;
9 //The ball's position at point of contact
10 var x = x-r*Math.cos(theta);
11 var у = y-r*Math.sin(theta);
5. Обнаружение столкновений_____________________________________127
I л ом шаге мы хотим выяснить, где шар должен быть (его х- и ^-
координаты), or да он впервые сталкивается с линией. Мы делаем это,
используя тригономет-¦ю, описанную ранее. Имена переменных такие же, как
описанные ранее, ответствуют вычислениям. Строки 10 и 11 дают нам то, что
мы ищем.
Мы выполняем следующим шаг 4, до шага 3. Ниже представлен код tionScript
для этого шага.
1 //Step 4
2 var dis = Math.sqrt((x-point.х)*(x-point.х)
+(y-point.y}*(y-point.y));
3 var vel = Math.sqrt (point.xmov*point.xmov
+point.ymov*point.ymov);
4 var frames = dis/vel
Мот шаг освежающе короток. Здесь мы вычисляем число кадров, необходимых
мру, чтобы добраться из текущей позиции в точку, в которой он
сталкивается гинией. Возвращаясь к главе по основам физики, мы
вспоминаем, что distance = locity*frames. Если мы решаем это уравнение
для кадров, мы получаем frames = stance/velocity. Так что если мы найдем
расстояние между текущим положением точкой столкновения и векторную
скорость вдоль этой линии, то мы можем йти количество кадров, за которое
она попадет туда! В строке 2 мы используем орему Пифагора вновь для
получения расстояния. В строке 3 мы используем ту теорему еще один раз,
для нахождения векторной скорости вдоль траектории. !лконец, в строке 4
мы получаем количество кадров как отношение расстояния и •кторной
скорости.
О Чтобы посмотреть более детально, как время (кадры) могут быть
вычислены, см. файл line_ball_time_calculation.pdf в папке Chapter05.
\ шаге 4 мы проверяем физическую точку контакта, чтобы убедиться, что она
кичодится в границах отрезка линии.
1 //Step 3
2 //now check to see if point of contact is on the line
segment
3 var slope2a = - 1/tempLine.s1 ope;
4 var b2a = y-slope2a*x;
5 //point of contact
6 var xa = (tempLine . b-b2a)/(slope2a-tempLine.slope);
7 var ya = slope2a*xa+b2a;
8 if ( (xa>tempLine.xl && xa<tempLine.x2)
И (xactempLine.xl && xa>tempLine.x2)
II ( (ya>tempLine . yl && yaCtempLme . y2 )
|| (yactempLine.yl && ya>tempLine.y2))) (
128 Часть 2 Исследование ochg
9 //within segment boundaries
10 ( else {
11 //not within segment boundaries
12 //set framel high
13 var frames = 1000;
14 }
15 return frames;
Для нахождения координат точки контакта мы представляем линию, проведений
через центр окружности и точку контакта. Цель состоит в том чтобы найти
наши и координату у точки пересечения этой линии (что будет означать, что
мы зна| все, что нам нужно) и, имея эту информацию, посмотреть, где эта
линия nepecei ет основную линию. Это пересечение является точкой
контакта. Мы знаем накл основной линии, и мы знаем, что все линии,
перпендикулярные, к ней имеют я клон, который обратно пропорционален и
противоположен по знаку. Строка 3 п казывает, как мы находим наклон
воображаемой линии. Помня, что уравнение д линии представляет собой у -
т*х+Ь, и помня о том, что мы имеем координа1 для одной точки на этой
линии (центр окружности), мы можем подставить зна"
ния х, у и т (наклон) для нахождения b (координата у пересечения).
Строка 4 I
монстрирует это. Теперь мы имеем всю информацию, которая нам нужна об о(
их линиях, так что мы можем найти пересечение между ними. Строки 6 и 7
rioj чают координаты пересечения линии с применением методики, которую мы
| пользовали недавно. Этот блок кода завершается условным оператором,
котор! сравнивает эту точку (пересечение) с границами отрезка линии. Если
точка noi дает между границами, то ничего не происходит. Если эта точка
(которая являег точкой пересечения между двумя линиями) не попадает в
границы отрезка, столкновение не происходит и переменная frames
устанавливается в значе1 1000 (нечто большое). Если значение переменной
frames меньше или равно и точка контакта находилась в границах отрезка
линии, то столкновение им< место быть. Последняя строка вышеприведенного
кода возвращает перемени frames в качестве результата функции. Функция,
которая вызвана функщ getFrames(), bankCollisionDetect(), возвращает ей
число кадров и затем провер: является ли число кадров меньшим или равным
1.
Мы увидим это снова в гл.6 "Реакции на столкновения." Вы встали на п
создания игры с продвинутыми методиками!
Гг ва 5. Обнаружение столкновений
129
< 'бнаружение столкновения точки с прямоугольником
11осле того что вы уже видели в этой главе, оставшееся очень легко 1Я
понимания и применения. (Мы не будем включать скрипты независимого от
кадров обнаружения столкновения в этот или следующий раздел.)
1 [оскольку это не является независимым от кадров обнаружением
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 210 >> Следующая