KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Майкл Моррисон - Создание игр для мобильных телефонов

Майкл Моррисон - Создание игр для мобильных телефонов

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн "Майкл Моррисон - Создание игр для мобильных телефонов". Жанр: Программирование издательство неизвестно, год неизвестен.
Перейти на страницу:

Как видно из списка, только клавиши 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 спрайта. Вы можете использовать этот пиксель для ссылки на спрайт (вместо левого верхнего угла спрайта, использующегося для ссылки по умолчанию). Действия и трансформации спрайта связаны с пикселем ссылки, что, в свою очередь, упрощает осмысленное управление спрайтом.

Member Constants

В классе Sprite заданы следующие константы, которые используются для идентификации трансформаций, применимых к спрайту:

► TRANS_NONE – спрайт никак не трансформируется;

► TRANS_ROT90 – спрайт вращается по часовой стрелке на 90 градусов;

► TRANS_ROT180 – спрайт вращается по часовой стрелке на 180 градусов;

► TRANS_ROT270 – спрайт вращается по часовой стрелке на 270 градусов;

► TRANS_MIRROR – спрайт наклоняется по вертикальной оси;

► TRANS_MIRROR_ROT90 – спрайт наклоняется по вертикальной оси и поворачивается по часовой стрелке на 90 градусов;

► TRANS_MIRROR_ROT180 – спрайт наклоняется по вертикальной оси и поворачивается по часовой стрелке на 180 градусов;

► TRANS_MIRROR_ROT270 – спрайт наклоняется по вертикальной оси и поворачивается по часовой стрелке на 270 градусов.

Эти константы трансформации применяются посредством методы setTransform() и позволяют вам создавать в спрайте различные эффекты, связанные с вращением и зеркальным отображением.

Конструкторы

Для создания спрайтов в классе Sprite поддерживаются следующие конструкторы:

► Sprite(Image image) – создает основанный на изображении, не содержащий анимации спрайт;

► Sprite(Image image, int frameWidth, int frameHeight) – создает анимированный спрайт, основанный на изображении. Данный спрайт содержит кадры анимации (размер и количество кадров определяется заданной шириной и высотой кадра);

► Sprite(Sprite s) – создает один спрайт из другого.

Первые два конструктора позволяют вам создавать неанимированные и анимированные спрайты, соответственно, а третий конструктор используется только для копирования спрайта.

Методы

В классе Sprite поддерживаются следующие методы:

► void setFrameSequence(int[] sequence) – задает последовательность анимационных кадров для спрайта;

► void nextFrame() – настраивает текущий кадр спрайта на следующий кадр в анимационной последовательности;

► void prevFrame() – настраивает текущий кадр спрайта на предыдущий кадр в анимационной последовательности;

► int getFrame() – считывает индекс текущего кадра спрайта в последовательности кадров;

► void setFrame(int sequenceIndex) – настраивает текущий кадр спрайта в анимационной последовательности на определенный индекс кадра;

► int getFrameSequenceLength() – считывает количество кадров в анимационной последовательности;

► int getRawFrameCount() – считывает количество анимационных кадров для спрайта, указанное в изображении спрайта;

► void setImage(Image img, int frameWidth, int frameHeight) – задает для спрайта определенное изображение;

► boolean collidesWith(Image image, int x, int y, boolean pixelLevel) – проверяет наличие конфликта между спрайтом и изображением в определенном положении по осям X и Y (последний параметр указывает, должен ли этот конфликт быть пиксельным или основанным на конфликте прямоугольника);

► boolean collidesWith(Sprite s, boolean pixelLevel) – проверяет наличие конфликта между двумя спрайтами (второй параметр указывает, должен ли этот конфликт быть пиксельным или основанным на конфликте прямоугольника);

► boolean collidesWith(TiledLayer t, boolean pixelLevel) – проверяет наличие конфликта между спрайтом и вложенным слоем (второй параметр указывает, должен ли этот конфликт быть пиксельным или основанным на конфликте прямоугольника);

► void defineCollisionRectangle(int x, int y, int width, int height) – создает прямоугольник границы для спрайта. Данный прямоугольник предназначен для распознавания конфликтов прямоугольника (часто он меньше, чем сам спрайт; это позволяет учесть спрайты, не имеющие прямоугольной формы);

► void defineReferencePixel(int x, int y) – создает для спрайта пиксель ссылки, который используется для перемещения и трансформации спрайта вместо его левого верхнего угла;

► int getRefPixelX() – считывает положение пикселя ссылки спрайта по оси X относительно системы координат (canvas или layer manager);

► int getRefPixelY() – считывает положение пикселя ссылки спрайта по оси Y относительно системы координат (canvas или layer manager);

► void setRefPixelPosition(int x, int y) – задает положение пикселя ссылки слоя по осям X и Y относительно системы координат объекта (canvas или layer manager);

► void setTransform(int transform) – настраивает трансформацию спрайта (для указания типа трансформации используются константы трансформации);

► void paint(Graphics g) – рисует спрайт, если он видимый.

Данные методы поддерживают большое количество функций спрайта, например, создание анимационной последовательности, распознавание конфликтов, работу с пикселем ссылки и добавление трансформаций.

Класс TiledLayer

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*