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

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

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

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

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

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

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 135 136 137 138 139 140 < 141 > 142 143 144 145 146 147 .. 210 >> Следующая

makeLinesVisible в false с тем, чкЯ бы мы видели только графику пинбола.
Как вы, возможно, помните из глав, им священных обнаружению столкновений
и реакциям на столкновения (в которьм подробно рассмотрено создание
функции createLineQ), каждая линия содержи кЯ в динамически созданном
клипе. Эти клипы являются единственными клипамЯ в игре, создаваемыми
динамически.
Глава 16. Пинбол
421
В строках 4 и 5 мы устанавливаем видимость двух клипов в false. Вы можете
видеть эти два белых клипа в сцене вверху (т. е. в верхней части) левого
и правого треугольников. В большинстве случаев обнаружение столкновений и
реакции на столкновения работают превосходно. Однако может быть странное
поведение, когда шар сталкивается с границей раздела двух линий, т. е.
когда шар сталкивается с любым из трех углов каждого из двух
треугольников, шар может быть послан внутрь треугольника вместо того,
чтобы быть отброшенным прочь. Следовательно, мы включаем эти клипы и
используем hitTestQ в качестве предохранителя, чтобы шар никогда не
застрял внутри. (По очень схожей причине мы будем использовать похожую
функцию patchQ в гл. 18, "Девять шаров".) Будущие усовершенствования этой
игры будут, надеемся, включать лучшие решения этой проблемы краевого
эффекта.
В строках 6-13 мы создаем объект с именем ball для хранения информации
о шаре. Имя экземпляра клипа шара - pb. Далее мы создаем переменную с
именем airDecay. Она контролирует процентное замедление шара в процессе
его движения по доске. Далее устанавливается переменная gravity со
значением, равным 0.2. В каждом кадре значение 0.2 будет прибавляться к
векторной скорости шара по V. В строке 16 мы создаем переменную с именем
depth со значением, равным 100. Это дает нам начальную глубину для
динамического размещения клипов. Единственные клипы, которые мы будем
добавлять динамически - это линии, которые могут быть либо видимы, либо
невидимы. В строке 17 мы устанавливаем значение runPatch в 0, для запуска
счетчика. Как в игре Девять шаров, мы не выполняем функцию patch() в
каждом кадре, но лишь раз в 20 или 30 кадров. Затем мы создаем массив с
именем bumperArray. Этот массив будет использоваться для хранения
объектов, которые представляют на экране несколько амортизаторов. Мы
рассмотрим это подробнее в функции addBumper(). Наконец, вызывается
функция buildMapQ. Эта функция размещает стены и объекты в памяти и затем
запускает игру.
422
Часть 2. Исследование основ
(ООО
___________Oil* " ¦ % t: i 4сягм___о с" ТЗ
: SesM-V """* ~ • й. По" 'It?*
. Lii.I.inn. hi. fJr,.lri, -llOi ll>U Lii • [<'"¦ - r* -p,;. I
00 )=-.* , |ЫЮ 4 IT -i. .Ij
Событие onEnterFrame
нижней части кадра Actions находится событие onEnterFrame. Это событие
обрабатывает вычисление новых координат шара, обнаружение столкновений,
перехват нажатий на клавиши и рисование нового положения шара на экране.
Эта функция представлена ниже
1 this.onEnterFrame = function!) f .
2 //now=getTimer{);
3 if (inPlay) {
4 if (animate) {
5 animatePlunger ();
6 )
7 collided = false;
8 getTempPositions () ;
9 captureKeys();
10 iff!collided) {
11 bankCollisionDetect () ;
12 }
Глава 16 Пинбол
423
13 if (!collided) {
14 bumperCollisionDetect();
15 }
16 checkForWalls ();
17 render (j ;
18 p a t с h () ;
19 }
20 //trace(getTimer()-now);
21 } ;
Для начала обратите внимание на две строки кода ActionScript, которые
были закомментированы, - строки 2 и 20. Они служат для тех же целей, что
и в игре Девять шаров. Если их активизировать, они печатают в окне
трассировки значение времени, затраченного на каждый кадр. С помощью
такой трассировки вы можете лучше анализировать эффективность вашего кода
ActionScript. Если па каждый кадр тратится слишком много времени, то вы
знаете, что вам нужно упростить код ActionScript или возможно удалить
несколько объектов из сцены.
Основная часть кода ActionScript в этом событии содержится в большом
блоке if, который просто проверяет, равно ли значение inPlay true. Если
оно равно true, выполняются операторы внутри блока; в ином случае ничего
не происходит. В строках 4-6 мы проверяем, равно ли значение переменной с
именем animate true. Если да, это означает, что мы предполагаем анимацию
поршня. Когда поршень достиг цели назначения (при выстреле), значение
animate устанавливается в false. Далее мы устанавливаем значение
переменной с именем collided в false. При обнаружении столкновения с
линией, окружностью или ракеткой мы устанавливаем значение collided в
true. Мы хотим избежать многочисленных обнаружений столкновений и реакций
в одном кадре, и установкой этой переменной мы можем сделать это. В
строке 8 мы устанавливаем временную позицию шара в памяти, вызывая
функцию getTempPositions(). В следующей строке мы перехватываем нажатия
клавиш, вызывая captureKeys(). Эта функция проверяет, нажаты ли кнопки
Ctrl (Windows), Command (Mac), Shift или пробел. Более подробно вы
узнаете об этой функции позднее.
Предыдущая << 1 .. 135 136 137 138 139 140 < 141 > 142 143 144 145 146 147 .. 210 >> Следующая