Создание игр для мобильных телефонов
Шрифт:
Классы в пакете javax.microedition.lcdui.game часто называют «API для мобильных игр»; эти классы очень важны, потому что они поддерживают функции, которые разработчикам MIDP 1.0 приходилось создавать самостоятельно. Другими словами, вам не придется изобретать велосипед, чтобы создавать новые игры в MIDP 2.0 API. Вероятно, самой важной функцией в API является встроенная поддержка графики с двойной буферизацией, которая максимально упрощает разработку игр с плавной графической анимацией. Кроме того, API поддерживает такие функции, как анимация спрайтов, вложенные слои, поиск ошибок и так далее.
API для мобильных игр в MIDP 2.0 включает пять классов:
► GameCanvas;
► Layer;
► LayerManager;
► Sprite;
► TiledLayer.
Остальные
Класс GameCanvas
Класс GameCanvas происходит из стандартного класса Canvas; он предлагает специальную схему, которая поддерживает графику с двойной буферизацией. Вы можете воспринимать класс GameCanvas в качестве функции, обеспечивающей отображение интерфейса мобильных игр на экране телефона. Конечно, это может показаться вам странным, но класс GameCanvas отвечает за поддержку клавиатуры в играх. Для обработки команд с клавиатуры могут применяться и другие классы J2ME, однако поддержка клавиатуры в классе GameCanvas намного более эффективна, поэтому она лучше отвечает высоким требованиям, предъявляемым к мобильным играм.
Константы
В классе GameCanvas заданы следующие константы, которые используются для идентификации клавиш на мобильном телефоне:
► LEFT_PRESSED – клавиша ←;
► RIGHT_PRESSED – клавиша →;
► UP_PRESSED – клавиша ↑;
► DOWN_PRESSED – клавиша ↓;
► FIRE_PRESSED – клавиша Primary Fire;
► GAME_A_PRESSED – клавиша Game A (опционально);
► GAME_B_PRESSED – клавиша Game B (опционально);
► GAME_C_PRESSED – клавиша Game C (опционально);
► GAME_D_PRESSED – клавиша Game D (опционально).
Эти константы используются вместе с методикой getKeyStates, которая описана в разделе «Методы» описания класса GameCanvas. Все константы клавиш являются масками бита, а это значит, что вы можете их использовать для того, чтобы определить, была нажата определенная клавиша или нет.
Как видно из списка, только клавиши LEFT_PRESSED, RIGHT_PRESSED, UP_PRESSED, DOWN_PRESSED и FIRE_PRESSED будут гарантированно поддерживаться на всех мобильных телефонах; остальные клавиши являются опциональными.
Конструктор
Класс GameCanvas имеет только один конструктор, принимающий один параметр, который определяет, можно ли использовать механизм управления, заданный в J2ME, по умолчанию: GameCanvas(boolean suppressKeyEvents).
Класс GameCanvas предлагает свою методику обработки нажатий клавиш, getKeyStates, следовательно, большинство игр не используют стандартную систему реагирования на нажатия клавиш в J2ME. Поэтому многие игры напрямую обращаются к конструктору GameCanvas, позволяющему отключить методику восприятия нажатий клавиш по умолчанию. Методика getKeyStates более эффективна, так как она не конфликтует с обычной системой восприятия клавиш. Если ваша игра использует смешанный подход к обработке нажатий клавиш, вам необходимо передать конструктору команду «false», чтобы активировать методику обработки нажатий клавиш по умолчанию.
Методы
В классе GameCanvas поддерживаются следующие методы:
► Graphics getGraphics – получает объект Graphics для рисования на игровой схеме;
► void flushGraphics – обнуляет буфер экрана и позволяет
отобразить графические объекты на экране телефона;► void flushGraphics(int x, int y, int width, int height) – обнуляет отдельную область буфера экрана и позволяет отобразить графические объекты в данной области;
► int getKeyStates – считывает состояние клавиш игры (для определения состояния каждой клавиши используются константы, являющиеся масками бита);
► void paint(Graphics g) – рисует схему игры.
Для поддержки графики с двойной буферизацией в мобильной игре вам достаточно нарисовать графический объект, считанный с помощью функции getGraphics, а затем отобразить данный объект на экране, используя функцию flushGraphics.
Класс Layer
Класс Layer представляет в мобильной игре общий графический объект; он является базовым классом для таких классов, как Sprite и TiledLayer. Несмотря на то что вы напрямую не создаете объекты Layer, вам необходимо регулярно применять методы класса Layer во время работы со спрайтами и вложенными классами.
Методы
В классе Layer поддерживаются следующие методы:
► int getX – считывает положение верхнего левого угла слоя по оси X относительно системы координат объекта (canvas или layer manager);
► int getY – считывает положение верхнего левого угла слоя по оси Y относительно системы координат объекта (canvas или layer manager);
► int getWidth – считывает ширину слоя (в пикселях);
► int getHeight – считывает высоту слоя (в пикселях);
► void setPosition(int x, int y – считывает положение верхнего левого угла слоя по осям X и Y относительно системы координат объекта (canvas или layer manager);
► void move(int dx, int dy) – изменяет положение слоя по осям X и Y на указанное значение по горизонтали и вертикали (в пикселях);
► boolean isVisible – считывает видимость слоя;
► void setVisible(boolean visible) – настраивает видимость слоя;
► abstract void paint(Graphics g) – рисует слой при условии, что он видимый.
Эти методы обеспечивают доступ к таким стандартным параметрам слоя, как положение по осям X и Y, ширина, высота и видимость. Помните о том, что данные методы поддерживаются и классами Sprite, и TiledLayer (так как они происходят от класса Layer).
Класс Sprite
Модели класса Sprite являются двухмерными спрайтами, которые могут перемещаться и изменять параметры анимации одновременно. Спрайт перемещается путем изменения положения по осям X и Y, а изменение его внешнего вида достигается с помощью группы анимационных кадров, которые входят в состав изображения спрайта. Все анимационные кадры имеют одинаковые размеры, а кадры располагаются в изображении по порядку. По умолчанию спрайт содержит последовательность анимации, в которой анимационные кадры располагаются так же, как и на изображении. Чтобы создать уникальные эффекты анимации для спрайта, вы можете настроить анимационную последовательность любым способом.
Также вы можете трансформировать спрайты, то есть вращать и/или зеркально отображать их, чтобы уменьшить количество необходимых изображений. Кроме того, спрайты содержат пиксель ссылки (reference pixel), который является координатой по осям X и Y спрайта. Вы можете использовать этот пиксель для ссылки на спрайт (вместо левого верхнего угла спрайта, использующегося для ссылки по умолчанию). Действия и трансформации спрайта связаны с пикселем ссылки, что, в свою очередь, упрощает осмысленное управление спрайтом.