N: уроки по программированию игр во флэше


Авторы: Raigan Burns, Mare Sheppard
Перевод: Nox Noctis
назад к списку уроков и рецептов


От авторов

Данные уроки нацелены на тех, кого интересуют алгоритмы определения столкновений (collision detection) и реакции на них в двухмерных играх, а также на тех, кому интересна реализация этих алгоритмов в игре N. (Собственно, определение столкновений — это ключевая проблема в играх вообще, и в флэш-играх в частности. — прим. перев.)

Мы постарались объяснить всё, начиная с самых азов, так что, возможно, в уроках есть разделы, которые вы захотите пропустить; мы также постарались включить достаточно информации, чтобы даже относительно опытные разработчики игр могли найти какие-то новые для себя идеи.

Некоторые моменты, изложенные в уроках, не реализованы в текущей версии игры N, но были разработаны для неё и затем отвергнуты по каким-то соображениям. Возможно, эти вещи будут использованы в наших будущих игровых разработках.

Цель наших уроков — объяснить некоторые вещи, которым мы научились, программируя N; нам очень помогли некоторые ресурсы Сети и в ответ мы хотели бы поделиться своим опытом с флэш-сообществом.

А второй мотив — нас уже тошнит от паршивых флэшовых "игр", разбросанных по Сети, и мы хотим показать, что ActionScript вполне способен обеспечить всё необходимое для создания красивых и захватывающих игр, которые будут не просто "флэш играми", но по праву будут называться видео играми.

Флэш особо привлекателен для разработчиков маленьких проектов, поскольку позволяет создавать их крайне быстро, хоть зачастую и жертвуя производительностью приложения. Вероятно, если бы все ожидали от флэш-игр качества, сравнимого с качеством игр, реализованных на других языках, было бы гораздо больше настоящих игр и меньше рекламных-банеров-выдающих-себя-за-игры (которые, вообще говоря, и играми-то считать несколько странно, не говоря уже о "видео играх").

Каждый из уроков сопровождается исходниками, собранными из движка нашей игры; вероятно, мы выпустим полный исходник игры N (за исключением частей, отвечающих за работу с сервером и сохранение набранных очков) как только завершим следующую игру — что, мы надеемся, произойдет в скором времени!

Исходный код написан на ActionScript, но должен быть понятен и для разработчиков на C иди Java (для них, скорее всего, это будет выглядеть как некий псевдо-код).

Единственное, о чем стоит предупредить насчет наших исходников — наш подход к программированию, возможно, покажется вам слишком неструктурированным; в ActionScript частые вызовы функций существенно влияют на производительность приложения в целом, поэтому мы решили для часто используемых частей и "базовых" свойств (принцип работы с которыми вряд ли когда-либо изменится при реализации) использовать прямой доступ, а не геттеры/сеттеры в ООП стиле. Вместо создания методов:
GetPos(),SetPos(p),GetRadius(),SetRadius(r), etc. 
мы используем:
.pos .r
Однако, этот подход не использован бездумно, а всегда подчинен определенному "интерфейсу". Например, если объект реализует интерфейс "dynamic shape", он обязан иметь следующие свойства, которые всегда должны содержать актуальные данные об объекте:
.pos .r .xw .yw
Правда, поскольку Flash Player отрисовывает экран очень медленно, вряд ли какие-то вычисления во время выполнения программы будут её основным узким местом — если, конечно, вы не будете делать время выполнения то, чего делать не следует: к примеру, использовать алгоритм со сложностью O(n2) или выполнять большое количество вычислений над длинным списком объектов. В крайнем случае, можно реализовать геттеры/сеттеры, а затем заменить их при оптимизации на прямой доступ к свойствам, если уж вам нужно выжать из программы всю возможную скорость.

Metanet Software Inc. Metanet Software Inc.
Raigan Burns, Mare Sheppard
в начало

От переводчика

Игра N, первая версия которой вышла в марте 2004 года, по сей день является самой лучшей реализацией аркады/платформера во флэше. Особенно интересно в этой игре решение проблемы физической реалистичности и анимации персонажа (а также то, что всё это очень быстро и гладко работает :) ).

С точки зрения разработчика игра интересна реализацией во флэше алгоритмов, которые являются основополагающими для гейм-дизайна и которыми чаще всего совершенно пренебрегают флэш-разработчики (обычно просто по незнанию).

В этих уроках не ставится цель "объяснить всё всем". Главная задача — дать обзор известных геометрических методик, чтобы разрабтчики флэш-игр перестали изобретать велосипеды.
в начало
назад к списку уроков и рецептов