Гэри Розенцвейг - Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript
В другом варианте игра оканчивается, когда игрок собрал все орехи. Опять же вы можете сделать пространство игры больше.
Большинство платформенных скроллеров предлагают также избавляться от разных отрицательных героев. Обычно для этого достаточно прыгнуть сверху на такого плохого парня. В существующем варианте игры, если вы запрыгнете на кролика, игра окончится точно так же, как если бы вы пересеклись с ним по горизонтали. Но если вы сможете определить, что лиса падает сверху в момент столкновения с кроликом, то получите сражающуюся лису, которая будет получать дополнительные очки за побежденных кроликов.
Платформенные скроллеры могут быть очень сложными. Они запросто могут включать сотни страниц кода, добавляющих все больше и больше характеристик в игру. У вас же сейчас реализованы лишь самые основные моменты. Используя навыки предыдущих глав, вы вполне можете сколько угодно надстраивать эту игру.
Глава 17 Сложные приемы
• Выполнение и оптимизация
• Экран загрузки
• Защита от копирования
• Список лучших игроков
• Определение версии Flash-плагина
Хотя в предыдущих главах речь шла о сотнях алгоритмов ActionScript, многое осталось «за кадром». Мы не стали для иллюстрации этих концепций описывать использующие их игры, решили, что оптимальнее рассмотреть дополнительные возможности сами по себе. В этой главе затрагиваютсяе такие темы, как оптимизация, загрузка ролика, списки лучших игроков и защита от копирования, а также описывается множество полезных технических приемов.
Выполнение и оптимизация
При разработке игр с помощью программы Flash всегда возникает вопрос о скорости. До пятой версии Flash язык программирования был недостаточно эффективным и не позволял создавать многие игры. Но даже версия 5 была довольно медленной. Достаточно медленной, чтобы было невозможно реализовывать многие игры. Версия 8 значительно улучшила быстродействие программы. Теперь можно создавать игры, для которых Flash 5 был слишком медленной программой. Даже игры, созданные в пятой версии и запущенные с помощью проигрывателя версиии 8, смотрятся лучше. Но независимо от того, используете ли вы версию MX или 8, техника оптимизации может помочь ускорить любую игру или программу.
Использование альтернативных возможностей
Основная концепция оптимизации – существование нескольких путей выполнения одной и той же задачи. Для большинства случаев это действительно так. Например, если вы хотите переместить графический объект с одной стороны рабочего поля на другую, можно использовать анимацию движения (motion tween) или написать код на языке ActionScript.
Когда вы создаете что-либо в программе Flash, у вас есть две альтернативы. Первая – выполнение одной задачи разными способами. Например, результат перемещения графического объекта с помощью построения промежуточных изображений или ActionScript одинаков.
Другая альтернатива – изменение программы, чтобы результат был похож, но все-таки отличался. Например, если графический объект движется по экрану слишком медленно, можно его уменьшить, и теоретически скорость его перемещения возрастет.
Ключ к успеху оптимизации состоит в том, что вы должны четко представлять себе существующие альтернативы и тщательно взвесить их преимущества и недостатки. Для определения преимуществ можно воспользоваться техникой, которая называется "установление контрольных точек".
Установление контрольных точек
Исходный файл: Benchmarkl.fla
Если вы хотите сравнить два альтернативных варианта увеличения скорости, вам нужно как-то ее измерить. Конечно, вы можете определить скорость на глаз: когда объект движется быстрее; но такой способ не очень точен. Установление контрольных точек позволяет выяснить, какая из альтернатив работает быстрее и насколько.
Обычно с помощью контрольных точек сравниваются две или более альтернатив при выполнении одинаковых или аналогичных задач. В каждом случае засекается время в начале и конце выполнения задания.
В результате вы определяете, сколько времени необходимо на выполнение этого задания. Проведя несложные математические расчеты, вы можете преобразовать эту величину в скорость воспроизведения ролика, то есть количество кадров в секунду (fps – frames per second).
В качестве примера возьмите какой-либо графический объект, перемещающийся через рабочее поле. На рис. 17.1 в центре экрана изображена лиса в тот момент, когда бежит справа налево.
Рисунок 17.1 . В течение 30 кадров большая лиса бежит справа налево
Индикатор в правом верхнем углу рис. 17.1 показывает, что скорость этого ролика составляет 35 кадров в секунду. На самом деле ролику задана скорость 120 кадров в секунду. 35 кадр/сек – реальный результат работы Flash-проигрывателя, который воспроизводит анимацию. Для того чтобы в верхнем правом углу отображалась надпись "35 fps", необходимо добавить небольшой фрагмент кода. В первый кадр кода надо поместить следующую строчку, чтобы запомнить время начала анимации:
startTime = getTimer();
В последнем, 30-м кадре, программа, используя время начала и конца анимации, подсчитывает, сколько миллисекунд заняло ее воспроизведение. Полученная величина отображается в текстовом поле.
totalTime = getTimer() – startTime;
totalFrames = 30;
fps = totalFrames/(totalTime/1000);
readout = int(fps) + "fps";Результат работы этого кода можно увидеть в ролике Benchmark1.fla, размещенном на Web-сайте поддержки книги. Когда я проигрывал ролик на своем Макинтоше в окне предварительного просмотра, результат варьировал от 33 до 35 кадр/сек [20] . Скорость также зависит от изменения масштаба. Попробуйте изменить масштаб в окне предварительного просмотра и посмотрите, как изменится скорость ролика.
...Совет
Важно помнить, что максимальная скорость, которую может предоставить Flash в таких случаях, – 120 кадр/сек. Если вы укажете скорость по умолчанию, равную, скажем, 12 кадр/сек, анимация будет проигрываться только с этой скоростью или медленнее. Даже если один способ будет быстрее другого, вы не заметите никакой разницы, так как в обоих случаях скорость окажется равна 12 кадр/сек.
Рисунок 17.1 был получен при проигрывании ролика в окне предварительного просмотра. Что же произойдет, если открыть окончательный swf-файл с помощью Flash-проигрывателя вне программы Flash? Вы получите несколько лучший результат, примерно 42 кадр/сек. То есть ролик воспроизводится Flash-проигрывателем быстрее, чем в окошке предварительного просмотра. Проигрывание Flash-ролика в браузере (Internet Explorer 5.1) дает меньшую скорость – примерно 22 кадр/сек.
Конечно, эти числа имеют значение только при сравнении друг с другом. Когда те же действия производились на других компьютерах (как под управлением ОС Windows, так и Macintosh), результаты были другими: где-то ролик проигрывался быстрее, где-то – медленнее. Вы даже не можете быть уверены, что скорость анимации будет одинаковой на другом компьютере того же производителя и такой же модели. У компьютера может быть другое разрешение, на нем могут больше работать в сети (это уменьшит скорость воспроизведения ролика при загрузке из сети), или диск может быть больше фрагментирован. Проводить тест установления контрольных точек имеет смысл только на одинаковых компьютерах при одинаковых условиях.
Выбор лучшей альтернативы
Исходный файл: Benchmark2.fla
Обратившись к предыдущему ролику, приведенному в качестве примера, предположим, что скорость в 22–42 кадр/сек для вас недостаточна. Допустим, в анимации лиса должна быстро промелькнуть, пробежать с одной стороны экрана на другую. При 22 или даже 42 кадр/сек вы не получите требуемого результата.
Можно уменьшить число кадров с 30 до 15, скорость увеличится в два раза, но анимация станет менее плавной. Так как клип лисы управляет длиной шага, лиса сделает в два раза меньше шагов, чтобы пробежать то же самое расстояние.
Если такой вариант не помогает, возможно, стоит изменить размер лисы. Что произойдет, если уменьшить лису в два раза? С одной стороны, число векторов изображения останется прежним, то есть время на построение изображения не зависит от его масштаба. С другой стороны, так как лиса будет меньше, для создания ее изображения понадобится меньшее число пикселов, следовательно, скорость ролика увеличится (понадобится меньше ресурсов для отображения каждого кадра).
Проверить эти гипотезы можно с помощью установки контрольных точек. Если уменьшить в два раза фигуру лисы в ключевых кадрах, вы получите такую же анимацию, только лиса будет меньше. Сценарий покажет, повлияло ли это на скорость ролика. (Готовый ролик Benchmark2.fla вы найдете на Web-сайте). Результат сравнения показан на рис. 17.2.
Рисунок 17.2. Ролик с небольшим изображением проигрывается быстрее
Маленькая лиса двигается быстрее, чем большая. Во Flash-проигрывателе на моем компьютере ролик воспроизводился со скоростью 60–70 кадр/сек, что примерно в два раза превышает скорость предыдущего ролика. Это подтверждает теорию о том, что для построения меньшего графического объекта требуется меньше времени.
Теперь остается выяснить, удовлетворяет вашим потребностям анимация с меньшим изображением лисы? Если да, то вопрос выбора альтернативы решен.