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

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

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

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

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

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

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 16 17 18 19 20 21 < 22 > 23 24 25 26 27 28 .. 210 >> Следующая

ветчину и направление. Более определенно: это вектор с величиной, которая
равняется отношению разницы векторной скорости к разнице времени, за
которое происходит это изменение, и с направлением, в котором совершается
ускорение. (Если это звучит подобно трем составляющим вместо двух,
прочитайте снова, обращая особое внимание на запятые).
Acceleration =(velocity2 -velocityl)/(time2 -timel)
где velocity2 представляет собой векторную скорость в момент time2 и
velocity] представляет собой векторную скорость в момент времени timel.
Единицами измерения ускорения является расстояние/время-.
г~ N
1 - 1
Скорость 1 Скорость 2
Момент времени 1 Момент времени 2
Ускорение - (Скорость 2 - Скорость1)
(Момент времени 2 - Момент времени 1)
V J
Если вы знаете ускорение объекта и его текущую векторную скорость, то вы
можете найти или предсказать векторную скорость этого объекта в любой
момент в будущем. Ниже приведено соответствующее уравнение:
velocity_future =velocity_now +acceleration*time
Величина time в уравнении выше означает, насколько далеко в будущее вы
заглядываете. Вспомните, что как векторная скорость, так и ускорение
являются векторами. Во Flash мы раскладываем векторы на их составляющие х
и у до того, как мы можем с ними работать. После того как мы найдем
xspeed vspeed, xacceleration и yacceleration (применяя методы,
использованные в гл.З и изложенные ранее в этом разделе), мы можем
написать следующие уравнения:
70
Часть 2. Исследование основ
yspeed_future=yspeed_now +yaccelerat ion* time
Если вы знаете текущую позицию и векторную скорость объекта, то вы можете
найти его положение в любой момент в будущем. Вы можете найти будущее
положение, используя следующие уравнения:
x-position_future =x-position_now +x-speed_now*time .+1/2 *(x-
acсe1eration)* time 2
и
y-position_future =y-position_now +y-speed_now*time .+1/2*(у-
acceleration)*time 7
Реализация ускорения с помощью ActionScript
Уравнения, которые вы только что видели, могут казаться запутанными, но
их применение во Flash очень просто. Вспомните, что мы можем заменить
время кадрами во всех наших уравнениях. Мы будем всегда вычислять новое
значение для ближайшего следующего кадра. Это хорошие новости для нас,
потому что это значит, что мы можем заменить время во всех уравнениях на
1. Используя этот трюк, мы можем переписать четыре х- и ^-составляющих
уравнений, показанных в предыдущем разделе.
Для скорости в будущем:
xspeed_future =xspeed_now +xacceleration
и
yspeed_future =yspeed_now +yacceleration Для позиции в будущем:
xposition_future =xposition_now +xspeed_now +1/2*(xacceleration)
и
yposition_future =yposition_now +yspeed_now +1/2*(yacceleration)
Как вы, вероятно, знаете, вы не можете сложить две величины с разными
единицами измерения. Например, 10 метров плюс 12 унций дают в результате
... бессмыслицу. В уравнениях выше мы, как кажется, складываем величины,
которые имеют различные единицы измерения (принося извинения всем
физикам, математикам и инженерам). Что произойдет, если мы выбросим
переменную frame из уравнения? Мы избегаем неприятностей, потому что мы
предположили, что значение переменной frame всегда будет 1 (см.
предыдущий раздел), и посколь-
Глава 4. Основы физики
71
ку умножение любого значения на 1 дает в результате первоначальное
значение (3*1=3), то мы просто не учитываем этот множитель. Так, если вы
озабочены относительно единиц измерения, вы можете теперь быть уверены,
что противоречия отсутствуют.
После всех этих теоретических рассуждений об ускорении, пришло время
применить их в контексте наших игр. Для использования ускорения п
программировании, вот что нужно сделать:
I. Создать переменную, содержащую ускорение. Например, ассе1=2.
Создать начальные переменные векторной скорости для х и у направлений.
Например:
xmov =0; ymov =0;
3. Когда ускорение нужно применить (к примеру, когда некая педаль
должна быть нажата), измените скорость. Например:
xmov +=accel; ymov +=accel;
4. Для каждого кадра установить новую позицию объекта.
car._x +=xmov; car._y +=ymov;
Откройте файл car4.fla из папки Chapter04 на CD. Это следующий
эволюционный этап в цепочке примеров автомобиля, представленных ранее в
этой главе. Здесь автомобиль начинает двигаться с маленькой начальной
скорости и разгоняется, когда нажата кнопка со стрелкой вверх. (Как вы,
возможно, ожидаете, когда нажимается кнопка со стрелкой вниз, автомобиль
тормозится.). Ниже представлен код ActionScript, который выполняет все
это.
1 xmov = 1;
2 ymov = 1;
3 а с с е 1 = 2;
4 angle = Math.atan2(ymov, xmov)* 180/Math
5 car. rotation = angle;
6 root. onEnterFrame =function 0 {
7 if(Key.isDown(Key.UP)) (
8 xmov += accel;
9 ymov += accel;
10 } else if (Key . isDown(Key. DOWN)) {
11 xmov -= accel;
72
Часть 2. Исследование основ
12 ymov accel;
13 ,
14 car._x += xmov;
15 car,_y += ymov;
16 }
Строка 3 инициализирует переменную ускорения accel. Другие отличия с
Предыдущая << 1 .. 16 17 18 19 20 21 < 22 > 23 24 25 26 27 28 .. 210 >> Следующая