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

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

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

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

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

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

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

проверяется, не столкнулись ли они.
Как и в случае столкновения точки с окружностью, мы сохраняем информацию
о каждом клипе в объекте. Ниже представлен код, который это делает
ActionScript.
1 //Define object for the first circle
2 circlel = {};
3 circlel.clip = circle_clipl;
4 circlel.x = circlel.clip._x;
5 circlel.у = circlel.clip._y;
6 circlel.radius = circlel.clip._width/2;
7 circlel.xmov = 3;
8 circlel.ymov = 1;
9 //Define object for the second circle
10 circle2 = ();
11 circle2.clip = circle_clip2;
12 circle2.x = circle2.clip._x;
13 circle2.y = circle2.clip._y;
14 circle2.radius = circle2.clip._width/2;
15 circle2.xmov = -1;
16 circle2.ymov = 0;
Вначале объект под названием circlel создается для хранения информации
о клипе circle_clip 1. В строке 3 вы можете обратить внимание на кое-
что, чего
вы не видели прежде. Мы создаем ссылку на клип с именем клипа в самом
объекте. Это позволяет нам указывать на клип, используя эту новую ссылку.
Например, оператор circlel .clip._х =100 переместил бы позицию х клипа
circle_clipI
в положение 100. (Я собираюсь часто использовать такую технику создания
ссылок на клипы в этой книге.) Следующие три строки создают переменные
для хранения положения окружности и ее радиуса. В строках 7 и 8 мы
назначаем
окружности скорости по х и у. Строки 9-16 делают для circle_clip2 то же,
что
первые 8 строк делают для circle_cl ip 1
Далее в ActionScript мы создаем функцию под названием moveCircles Эта
функция обновляет положение окружностей на основе их скоростей.
лава 5 Обнаружение
столкновений__________________________________________105
1 function moveCircles () (
2 for (var i=l; i<=2; ++i) {
3 var circle = this["circle" + i];
4 circle.x += circle.xmov;
5 circle.у += circle.ymov;
6 circle.clip._x = circle.x;
7 circle.clip._y = circle.у;
8 }
9 }
H этой функции есть цикл for, который занимает все тело функции и
перемещает каждую из окружностей. Этот код ActionScript не является
совсем новым (см. balloon_pop_many.fla), хотя это первый раз, когда мы
использовали ссылку
па клип из объекта. Помните, что мы храним ссылки на circle clipl и
circle_clip2
как переменные clip для объектов circlel и circle2, с которыми мы их
используем. И строках 6 и 7 вы можете видеть, что окружности перемещены с
использованием ссылки clip, которая существует для каждого объекта.
Функция, которая определяет столкновения между окружностями, называется
CircleToCircleDetection. Это почти то же самое, что и скрипт для
обнаружения столкновений, используемый для обнаружения столкновений между
точкой п окружностью.
1 function СiгcleToCiгcleDeteсtion(сircle a, circle b) {
2 var xDiff = circle_a.x-circle_b.x;
3 var -yDiff = с i r cl e_a . y-ci rc 1 e_b . у ;
4 var distance = Math.sqrt(xDiff*xDiff + yDiff* уDiff) ;
5 if (distance<=circle_a.radius+circle_b.radius) (
6 trace ("Collision detected!!");
7 )
8 )
Функция CircleToCircleDetection принимает два параметра: circle_a и
circle_b. Вначале код ActionScript находит расстояние между этими двумя
клипами. Затем он дос-тгает условия, которое проверяет, стало ли
расстояние между окружностями меньше суммы или равно сумме их радиусов.
Если да, то выполняется оператор trace.
Наконец, создается событие onEnterFrame, которое вызывает функцию
moveCircles и функцию CircleToCircleDetection в каждом кадре (я лишь
упоми-паю об этом при кратком обзоре кода скрипта; вы не увидите это
событие и коде, приведенном выше). Опубликуйте фильм и посмотрите, как он
работает.
106
Часть 2. Исследование основ
Обнаружение столкновения "окружность - окружность", независимого от
кадров
Хорошо, это был легкий путь! Теперь наступил момент поговорить о
независимом от кадров обнаружении столкновения окружности с окружностью.
Математика здесь становится немного более строгой, так что перед тем, как
продолжить, я хотел бы резюмировать, почему для вас так важно пробиться
через это. Во всех скриптах обнаружения столкновения, созданных до этого,
Flash проверяет один раз за кадр, не произошло ли столкновения прямо
сейчас. Вы можете думать об этом как о моментальных снимках отдельных
моментов времени. Я уверен, что вы можете представить, что если объект
движется достаточно бы-| стро, то в одном кадре он находится с одной
стороны другого объекта, а в следующем кадре он находится уже с другой
стороны этого объекта. Метод обнаружения столкновения, который мы
использовали, не смог бы определить такой вид столкновения, поскольку,
как было рассмотрено ранее, столкновение никогда не происходит. Но с
методом, о котором я начинаю разговор, мы можем сказать (вне зависимости
от скорости движения объекта), было ли столкновение между предыдущим
кадром и текущим кадром. Этот скрипт имеет прямое применение для игр типа
бильярда, пинбола, хоккея, мини-гольфа или любой игры, в которой могут
сталкиваться два шара (окружности).
Давайте рассмотрим логику, необходимую для независимого от кадров
Предыдущая << 1 .. 28 29 30 31 32 33 < 34 > 35 36 37 38 39 40 .. 210 >> Следующая