Майкл Моррисон

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


Скачать книгу

границы экрана

      g.drawString(captions[curSlide], getWidth() / 2, 0,

      Graphics.HCENTER | Graphics.TOP);

      }

      Метод paint() сначала очищает экран, тем самым удаляя то, что осталось от предыдущего слайда. Затем в центре экрана выводится текущее изображение. Далее выполняется настройка шрифта – полужирный, среднего размера, пропорциональный. Наконец, устанавливается черный цвет, и по центру у нижнего края экрана выводится текст.

      Когда вывод графики завершен, последняя часть кода класса SSCanvas занимается обработкой пользовательского ввода. Нажимая клавиши со стрелками влево и вправо, пользователь может перелистывать слайды. Технически до главы 6 вы не научитесь обрабатывать ввод в играх, но здесь я познакомлю вас с основами. Ниже приведен код метода keyPressed():

      public void keyPressed(int keyCode) {

      // Get the game action from the key code

      int action = getGameAction(keyCode);

      // Process the left and right buttons

      switch (action) {

      case LEFT:

      if (–curSlide < 0) //Перейти к последнему слайду, если первый уже показан

      curSlide = slides.length – 1;

      repaint();

      break;

      case RIGHT:

      if (++curSlide >= slides.length) //Перейти к первому слайду, если последний уже показан

      curSlide = 0;

      repaint();

      break;

      }

      }

      Метод keyPressed() открывает новые горизонты программирования игровых мидлетов – обработку игровых событий. Игровое событие – это особое событие, которое ассоциировано с клавишами, обычно используемыми в играх. Смысл заключается в том, что вы можете привязать действия к определенным клавишам, чтобы настроить пользовательский интерфейс. В методе keyPressed() с помощью метода getGameAction() определяется игровое событие, ассоциированное с клавишами. Константы LEFT и RIGHT используются для описания нажатий клавиш со стрелками влево и вправо. Если значение action совпадает со значением одной из констант, то номер текущего слайда увеличивается или уменьшается, а затем отображается новый слайд.

Листинг 4.3. Так выглядит класс SSCanvas, который выполняет большую часть работы мидлета Slideshow. В листинге 4.3 приведен полный код этого класса:

      import javax.microedition.lcdui.*;

      import java.io.*;

      public class SSCanvas extends Canvas {

      private Display display;

      private Image[] slides;

      private String[] captions = { "Love Circle Bowl", "Double Wide Spine", //Индексы массива соответствуют изображениям

      "Flume Zoom Over-vert", "Kulp De Sac Bowl",

      "Louie's Ledge" };

      private int curSlide = 0;

      public SSCanvas(Display d) {

      super();

      display = d;

      // загрузить изображения

      try {

      slides = new Image[5];

      slides[0] = Image.createImage("/LoveCircle.jpg");

      slides[1] = Image.createImage("/DoubleWide.jpg");

      slides[2] = Image.createImage("/FlumeZoom.jpg");

      slides[3] = Image.createImage("/KulpDeSac.jpg");

      slides[4] = Image.createImage("/LouiesLedge.jpg");

      }

      catch (IOException e) {

      System.err.println("Failed loading images!");

      }

      }

      void start() {

      display.setCurrent(this);

      repaint();

      }

      public void keyPressed(int keyCode) {

      // получить игровое событие

      int action = getGameAction(keyCode);

      // обработать нажатия клавиш

      switch (action) {

      case LEFT:

      if (–curSlide < 0)

      curSlide = slides.length – 1;

      repaint();

      break;

      case RIGHT:

      if (++curSlide >= slides.length)

      curSlide = 0;

      repaint();

      break;

      }

      }

      public void paint(Graphics g) {

      // очистить экран

      g.setColor(255, 255, 255); // белый

      g.fillRect(0, 0, getWidth(), getHeight());

      // вывести текущее изображение

      g.drawImage(slides[curSlide], getWidth() / 2, getHeight() / 2,

      Graphics.HCENTER