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

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

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

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

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

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

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

5 var xmov2 = b2.xmov;
112_____________________________________________Часть 2. Исследование
основ |
6 var ymov2 = b2.ymov;
7 //set the position variables
8 var xll = bl.xpos;
9 var yll = bl.ypos;
10 var xl2 = b2.xpos;
11 var yl2 = b2.ypos;
12 //define the constants
13 var R = bl.radius+b2.radius;
14 var a = -2*xmovl*xmov2+xmovl*xmovl+xmov2*xmov2;
15 var b = -2*xll*xmov2-2*xl2*xmovl + 2*xll*xmovl + 2*xl2*xmov2;
16 var с = -2*xll*xl2 + xll*xlH-xl2*xl2;
17 var d = -2*ymovl*ymov2+ymovl*ymovl+ymov2*ymov2;
18 var e = -2*yll*ymov2-2*yl2*ymovl + 2*yl1*ymovl + 2*yl2*ymov2;
19 var f = -2*yll*yl2+yll*yll+yl2*yl2;
20 var g = a+d;
21 var h = b+e;
2 2 var к = c+f-R*R;
23 //solve the quadratic equation
24 var sqRoot = Math.sqrt(h*h-4*g* к) ;
25 var tl = (-h + sqRoot)/(2 *g);
26 var t2 = (-h-sqRoot)/(2 *g) ;
27 if (11>0 SS 11<=1) {
28 var whatTime = tl;
29 var ballsCollided = true;
30 }
31 if (12>0 SS 12<=1) {
32 if (whatTime == null | | 12 < 11) (
33 var whatTime = t2;
34 var ballsCollided = true;
35 }
36 }
37 if (ballsCollided) {
38 //Collision has happened, so throw a trace
3 9 t race("Ouch!");
40 }
41 )
Сначала мы даем функции имя, ballToBallDetection, и устанавливаем два
параметра, Ы и Ь2. Когда эта функция поименована, два объекта будут
передан^ в нее и представлены Ы и Ь2. В строках 2-11 мы определяем
необходимые пе ременные скорости и положения. Далее мы определяем все
константы в выра-1 жениях переменных скорости и положения. Имена
переменных соответствую-) | тем, что мы рассматривали ранее в этом
разделе.
f пава 5. Обнаружение столкновений 113
В строках 24-26 мы решаем квадратное уравнение. В строке 24 мы
устанавлива-м переменную под названием sqRoot, чье значение эквивалентно
элементу квадратного корня в нашем решении квадратного уравнения
(помните, что существует ива решения, каждое из которых содержит тот же
самый квадратный корень). Мы танавливаем его как переменные, так что он
может быть повторно использован [я обоих решений (в строках 25 и 26). На
этом этапе мы имеем два момента, в которых шары будут сталкиваться. Как
следует из кода ActionScript (строки 27-36), ьюгично определить,
находится ли момент в прошлом, в настоящем или в будущем.
I ели момент в прошлом или в настоящем, то значение времени меньше
или равно IJ и столкновение произошло. Если момент находится в будущем
(больше 1), столк-мвения не было. Если столкновение произошло, то мы
сохраняем время, в которое произошло это столкновение (используя
переменную whatTime). Мы будем использовать эту информацию в гл.6,
"Реакция на столкновения". Также, когда столкновение обнаружено,
переменная с именем ballsCollided устанавливается в true. Когда
переменная ballsCollided имеет значение true, завершающее выражение if
выполня-i г оператор trace, чтобы дать вам знать, что было обнаружено
столкновение.
Создайте SWF, чтобы посмотреть, как это работает.
С помощью этого кода обнаружения столкновения вы можете определить, когда
буду! I (ем может произойти столкновение Когда вы решаете квадратное
уравнение ш timel и time2, оно сообщает вам некоторый момент в будущем,
когда шары пересекутся, даже если это за миллион кадров вперед.
Способность посмотреть более чем на один кадр в будущее - это то, с чем я
еще пока не знаю что делать, но, если это можно использовать, мы найдем
ей применение!
бнаружение столкновения "линия - линия"
В этом разделе мы рассмотрим уравнения для линий и для отрезков линий и
способ определения момента пересечения линий. Я никогда не сталкивался с
ситуацией, в которой мне потребовался код для обнаружения столкновения
двух движущихся линий, поэтому мы рассмотрим лишь обнаружение
столкновения для двух неподвижных линий. Для вас в данный момент не
очевидно, как - или где - может встречаться подобный вид обнаружения
столкновения. Как активный участник многочисленных форумов пользователей
Flash в Интернете, я часто вижу вопрос: "Как узнать, пересекаются ли две
линии?" Наиболее важное применение этого мы уви-щм в обнаружении
столкновения окружности с линией. Один этап в процессе обнаружения
столкновения окружности и линии состоит в проверке, пересекаются it! две
линии.
114
Часть 2. Исследование основ
I
Уравнение линии
Настало время снова вернуться к вашим занятиям в средней школе. Вы,
возмо? но, помните это уравнение:
у =m*x+b
где m представляет собой коэффициент наклона линии, а b является точкой о
сечения по у (местом, где линия пересекает ось у). Это уравнение для
прямой нии. Наклон m определен как подъем линии вдоль оси у к ее
протяжепноа вдоль х. Например, если линия идет под углом 45 , то ее
подъем и протяженно равны, так что наклон равен 1. Если у вас линия
близка к горизонтальной, то подъем меньше протяженности и, следовательно,
наклон мал - намного меньше Если линия горизонтальна, то ее подъем равен
0 и, следовательно, наклон также
| лава 5. Обнаружение столкновений
115
ли вы знаете наклон и точку пересечения линии с осью у, то вы можете
Предыдущая << 1 .. 31 32 33 34 35 36 < 37 > 38 39 40 41 42 43 .. 210 >> Следующая