Иллюстрированный самоучитель по программированию мобильных телефонов

Класс GameCanvas. Класс Layer.

Абстрактный класс GameCanvas составляет основу интерфейса всей создаваемой игры. Этот класс отвечает за прорисовку экрана, улучшая механизм работы игрового цикла и не используя при этом входные системные потоки. Весь игровой процесс может быть сосредоточен в одном цикле метода run () интерфейса Runnable.

Игровой цикл, используемый классом GameCanvas, отличается от аналогичного цикла применяемого классом Canvas. Типичная проблема игрового цикла класса Canvas заключается в том, что он разбит на несколько потоков. Вывод графики происходит в одном методе, обработка событий с клавиш – в другом, а изменение состояния игрового процесса в третьем. Такая модель работы может давать сбои, поэтому в классе GameCanvas была придумана более изящная конструкция игрового цикла, располагающаяся в одном единственном цикле.

public void run()
{
Graphics g = getGraphics();
while(true)
{
// метод, обрабатывающий нажатия клавиш с телефона
inputKey();
// метод, прорисовывающий графику
GameGraphics();
// копирует графические элементы
на экран из внеэкранного буфера
flushGraphics();
}

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

Сама же обработка событий с клавиш упрощена с помощью метода getKeyState (). Вы просто определяете нажатую клавишу пописываете соответствующие игровые действия для нее. Изменены некоторые названия констант для клавиш телефона. Обработка событий с клавиш телефона происходит с помощью следующих констант:

  • static int DOWN_PRESSED – движение.вниз;
  • static int FIRE_PRESSED – реализует стрельбу из оружия;
  • static int GAME_A_PRESSED – игровая клавиша A;
  • static int GAME_B_PRESSED – игровая клавиша В;
  • static int GAME_C_PRES.SED – игровая клавиша С;
  • static int GAME_D_PRESSED – игровая клавиша D;
  • static int LEFT_PRESSED – движение влево;
  • static int RIGHT_PRESSED – движение вправо;.
  • static int UP_PRESSED – движение вверх.

Использование констант значительно упрощает работу с объектом, а с помощью метода getKeyStates () класса GameCanvas, можно определить, какая именно клавиша нажата в данный момент. Проанализируем методы класса GameCanvas:

  • void flushGraphics () – копирует изображение из внеэкранного буфера на экран;
  • void flushGraphics(int x, int y, int width, int height) – копирует изображение из внеэкранного буфера на экран в заданный по размеру прямоугольник;
  • protected Graphics getGraphics () – получает графические элементы для представления их в последствии классом GameCanvas;
  • int getKeyStates () – определяет какая из клавиш нажата;
  • void paint (Graphics g) – рисует графические элементы, представленные классом GameCanvas.

Класс GameCanvas создает основной цикл игрового процесса в одном потоке, наблюдает за событиями, получаемыми с клавиш телефона на основе которых производит постоянное обновление экрана.

Класс Layer

Абстрактный класс Layer задает основные свойства для всех созданных уровней игры.

Класс Layer имеет два подкласса TiledLayer и Sprite. При создании любых других подклассов класса Layer необходимо реализовать метод paint () в этих классах, чтобы иметь возможность рисовать созданные уровни на экране телефона, представляемом классом Graphics. С помощью методов класса Layer можно задавать размер и позицию уровня.

  • int getHeight() – получает высоту экрана;
  • int getwidth() – получает ширину экрана;
  • int getX () – получает горизонтальную координату уровня;
  • int getY () – получает вертикальную координату уровня;
  • void move (int dx, int dy) – перемещает уровень на dx и dy координаты;
  • abstract void paint (Graphics g) – рисует уровень;
  • void setPosition (int x, int у) – устанавливает уровень в позицию, обозначенную в координатах х и у.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.