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

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

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

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

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

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

Макар Дж. Секреты разработки игр в Macromedia Flash MX — М.: КУДИЦ-ОБРАЗ , 2004. — 608 c.
ISBN 0-201-77021-0
Скачать (прямая ссылка): sekretirazrabotkiigr2004.djvu
Предыдущая << 1 .. 153 154 155 156 157 158 < 159 > 160 161 162 163 164 165 .. 210 >> Следующая

В строке 9 мы создаем массив с именем sinkList. Помните, что шар ¦
наименьшим номером на столе всегда должен поражаться первым. Номер пара с
наименьшим номером на доске равен значению sinkList [0]. Всякий раз,
согда шар попадает в лузу, его номер удаляется из массива sinkList. При
этом jinkList [0] будет всегда содержать шар с наименьшим номером на
столе. 3 строке 10 мы устанавливаем переменную с именем currentBall,
которая ис-юльзуется для хранения номера наименьшего шара на столе, в
значение sinkList [0]. Она хранит номер наименьшего шара на столе. Далее
мы создаем ювые массивы moving и notMoving. Они используются для хранения
объектов, соторые представляют шары, которые двигаются, и шары, которые
неподвиж-1ы. Когда шар начинает движение, он удаляется из notMoving и
вставляется в moving. Аналогично, когда шар прекращает движение, он
удаляется из moving 1 вставляется в notMoving.
Затем мы правильно размещаем шары на столе вызовом функции rack(). По-\ле
этого в строке 15, если ход за Эстель, ей дают шар в руке вызовом функции
)alllnHand() Строка "partial" передается в balllnHand() Эта строка
означает, что пар в руке позади головной линии. Если передается "full",
то она получает шар s руке без ограничений. Заключительные несколько
строк в этой функции про-фачны: вызывается функция moveVariables() (она
инициализирует некоторые временные и вызывается перед каждым ударом).
Затем появляется всплываю-цая графика и информирует вас, что игра
началась.
DnEnterFrame
3 нижней части кадра Actions есть событие onEnterFrame:
1 this. onEnterFrame = functionO (
2 //1 - getTimer();
3 if (inPlay) (
4 moveBal1s () ;
5 keepGoing- true;
6 t i m e r = 0 ;
7 while (keepGoing && ++timer<10) {
8 ball2Ball();
9
10 11 12 13
detectWalls () ; patch () ; renderBalls () ;
if (game.moving.length == 0) {
Глава 18. Девять шаров
469
14 moveDonef);
15 }
1
//trace(getTimer ()-1);
' 6 ' ;
Операторы в данном случае выполняются в каждом кадре, если значение
inPlay равно true. Эта переменная устанавливается в true, когда
пробивается шар-биток. В строке 4 мы делаем кое-что, что вы уже видели
повсюду в этой книге: обновляем координаты объектов в памяти, но не в
сцене. Далее мы устанавливаем значения keepGoing и timer соответственно в
true и 0. Ранее в этой главе мы в деталях рассмотрели способ, которым мы
выполняли обнаружение столкновения. Мы сохраняем все столкновения,
сортируем массив и затем вычисляем реакцию на столкновения для первого
столкновения в массиве. В строках 7-9 мы проходим через скрипт
обнаружения столкновения снова и снова, пока не обнаружены все
столкновения. Когда никаких более столкновений не обнаружено, функция
ball2Ball() устанавливает значение keepGoing в false и цикл прерывается.
Однако вы, вероятно, уже обратили внимание, что мы установили также
другое ограничение для этого цикла - мы не можем позволить ему
выполняться более чем 10 раз за кадр. Я выбрал число 10 как верхний
предел (названный ограничителем цикла) экспериментально. Я сыграл
несколько раз в бильярд, используя различные ограничители цикла, и
наблюдал физические результаты в зависимости от значения времени, которое
требуется на выполнение цикла. В итоге ограничитель 10 циклов дает
оптимальную физическую производительность с небольшим циклом по времени
сверху. В строке 10 мы запускаем скрип г, который делает проверку на
столкновения между шарами и бортами. Если шар сталкивается с бортом, мы
также проверяем его на столкновение с лузой, используя функцию
detectPocket() Проверка столкновения лузы с каждым шаром в каждом кадре
привела бы к неоправданным лишним вычислениям, так что мы проверяем лишь
в случае, когда шар сталкивается с бортом. Это помогает уменьшить
количество кода, выполняющегося в каждом кадре.
Несмотря на всю математику и физику, использованные в этой игре для
приданий ей высокой степени реализма, по-прежнему остаются проблемы,
которые могут возникнуть. Приблизительно 1 из каждых 50 или 100 ударов
заканчиваются слипанием двух шаров - совсем небольшим, но совершенно
явным. Это ошибка, в которой я, несомненно, буду разбираться в следующих
версиях этой игры, но эта работа вводит меня в ступор. Как последнее
средство в ситуации, подобной этой, я создал специальную функцию,
основанную на временном факторе.
470
Часть 2. Исследование основ
для проверки возникновения проблем. Эта функции имеет внутренний таймер,
который позволяет ей выполняться приблизительно раз в 20 кадров. Когда
функция выполняется, она проверяет с помощью hitTest() реальные клипы
шаров. Никакие два шара не должны никоим образом соприкоснуться, что,
естественно, означает столкновение. Если значение hitTest() возвращает
true, то шары соприкасаются и возникает наша ошибка. Затем мы слегка
расталкиваем шары в стороны, < так что они расходятся в стороны. Как
упомянуто выше, это не происходит слиш-^ ком часто, но, когда это
происходит, мы подготовлены.
Предыдущая << 1 .. 153 154 155 156 157 158 < 159 > 160 161 162 163 164 165 .. 210 >> Следующая