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

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

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

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

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

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

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

предыдущей версии Девяти шаров код постоянно делает проверку на
столкновение с каждым шаром. Так, например, если вы ударили шаром-битком
в 3-й шар, а все другие шары остались нетронутыми, код все так же
проверял бы столкновение между 5-м и 6-м шаром. Нет никакой причины,
почему я должен проверять столкновение между 5-м и 6-м шаром, если ни
один из них не двигался, - столкновение невозможно!
В этой версии Девяти шаров я создал два массива, названные moving и
notMoving. Имена говорят нам довольно много: массив moving содержит
ссылки на шары, которые двигаются, а массив notMoving содержит ссылки на
шары, которые неподвижны. Когда по шару произведен удар, он удаляется из
массива notMoving и помещается в массив moving. Когда шар прекращает
движение, он удаляется из массива moving и помещается в массив notMoving.
Когда массив moving пуст, это означает, что все шары остановились и ход
завершен. Эта техника помогает мне более эффективно определять, какие
шары должны быть проверены на столкновение. Я проверяю каждый движущийся
шар с каждым другим движущимся шаром и каждый движущийся шар с каждым
неподвижным шаром. Когда двигается много шаров, это может работать
несколько медленно. Но для большинства ударов есть лишь несколько
движущихся шаров, и так мы уменьшаем число проверок па обнаружение
столкновений.
54
Часть 2. Исследование основ
Анализ оптимизации
Важно понять, почему 10 шаров в игре Девять шаров является для нас более
подходящей величиной, чем 16 шаров, необходимых для игры Восемь шаров.
Здравый смысл диктует нам, что если вы имеете меньшее количество шаров,
го количество проверок на обнаружение столкновений уменьшается. Это так.
И обнаружение столкновений представляет собой "дорогой" скрипт, который
мы рассматриваем для минимизации.
Flash в действительности не испытывает больших проблем от наличия
большого количества шаров. Проблема в интенсивности вычислений. Игра с 10
шарами не просто немного быстрее - она существенно быстрее. Если в игре
Девять шаров двигаются все шары, мы имеем 45 проверок на обнаружение
столкновений в одном кадре. Если мы добавляем всего лишь 6 дополнительных
шаров, количество вычислений взлетает до 120 проверок на кадр-
приблизительно, в 3 раза всего лишь для шести дополнительных шаров. В
результате моих тестов я обнаружил, что игра с 13 шарами все еще работает
с приемлемой скоростью. Она требует 78 проверок на столкновения в кадре.
Помните, однако, что это максимальное число проверок на кадр, если все
шары двигаются. Когда двигаются лишь несколько шаров, это число
значительно уменьшается в результате способа оптимизации проверки
столкновений в данной игре (описанного выше в этом разделе).
Когда вы кодируете что-либо требующее от процессора значительных
ресурсов, важно потратить некоторое время, чтобы попытаться понять,
почему код требует таких затрат. Обычно есть способы уменьшить нагрузку
на процессор путем анализа причин медленной работы скрипта и нахождением
альтернативных способов кодирования. Если вы можете придумать хорошие
способы для этой игры в бильярд, скажем разделить шары (в памяти) на 4
квадранта стола и выполнять обнаружения столкновений, основываясь на
местоположении на столе, то вы могли бы уменьшить загрузку процессора в
достаточной степени, чтобы сделать игру Восемь шаров, которая хорошо
работает!
(то первый?
I применил в этой игре другую методику, которую я не использовал никогда
[режде: порядок столкновения. Это вполне возможно для более чем двух
шаров, талкивающихся в течение одного кадра. В действительности возможно
опреде-ить, что два шара столкнулись, когда они не должны были
столкнуться. Позволь-
Глава 18. Девять шаров
465
те мне объяснить. Представьте, что на столе двигаются 3 шара. Шар 1 и 2
двигаются друг к другу с противоположных сторон стола и находятся на
траектории столкновения. Шар 3 двигается перпендикулярно этим двум шарам
по траектории столкновения с шаром 1. Поскольку обычным образом для
обнаружения столкновений мы используем циклы, мы можем ошибочно
обнаружить столкновение между шарами 1 и 2, далее если шар 1 в
действительности сталкивается с шаром 3 на долю секунды раньше. Если шар
1 сталкивается сначала с шаром 3, то он, вероятно, отклонится от
траектории столкновения с шаром 2 и столкновение с шаром 2 никогда не
произойдет. Наши скрипты обнаружения столкновения рассматривают
возможности столкновения между двумя шарами и даже не принимают во
внимание факт, что существуют другие шары. Вы видите здесь проблему? Мы
должны обнаружить три столкновения с шаром 1 в одном кадре, но какое из
них является реальным столкновением? В конце концов, шар может
столкнуться зараз только с одним шаром. Ниже приведено решение.
1. Мы проходим по всем возможным сравнениям обнаружения столкновений.
Это означает, что мы проверяем каждый шар в массиве moving против каждого
другого шара в массиве moving и затем каждый шар в массиве moving против
Предыдущая << 1 .. 151 152 153 154 155 156 < 157 > 158 159 160 161 162 163 .. 210 >> Следующая