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

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

СКАЧАТЬ приоритетов относительны, и поскольку в рассматриваемом примере не используются другие команды, то численное значение приоритета в данном случае не существенно.

      Команда Exit мидлета Skeleton обрабатывается методом commandAction():

      public void commandAction(Command c, Displayable s) {

      if (c.getCommandType() == Command.EXIT) {

      destroyApp(true);

      notifyDestroyed();

      }

      }

      Методу commandAction() передаются два аргумента – команда и экран, на котором будет сгенерирована команда. В рассматриваемом примере интересна лишь команда. Объект Command сравнивается с константой Command.EXIT, таким образом осуществляется проверка, действительно ли выполняется команда Exit. Если да, то вызывается метод destroyApp() и мидлет разрушается. Аргумент true означает, что разрушение безусловно, то есть мидлет разрушается в любом случае, даже если возникла ошибка. Затем вызывается метод notifyDestriyed(), который сообщает менеджеру приложений о том, что мидлет перешел в состояние Destroyed.

      Мидлет Skeleton не работает с методами pauseApp() и destroyApp(), но вы должны реализовать их в любом случае:

      public void pauseApp() {}

      public void destroyApp(boolean unconditional) {}

      Хотя вы уже видели все фрагменты кода, полное содержимое файла SkeletonMIDlet.java представлено в листинге 3.1.

Листинг 3.1. Код класса SkeletonMIDlet, расположенный в файле SkeletonMIDlet.java

      import javax.microedition.midlet.*;

      import javax.microedition.lcdui.*;

      public class SkeletonMIDlet extends MIDlet implements CommandListener {

      private SCanvas canvas;

      public void startApp() {

      if (canvas == null) {

      canvas = new SCanvas(Display.getDisplay(this));

      Command exitCommand = new Command("Exit", Command.EXIT, 0);

      canvas.addCommand(exitCommand);

      canvas.setCommandListener(this);

      }

      // инициализация холста

      canvas.start();

      }

      public void pauseApp() {} //В данном примере эти методы не используются вовсе, однако все равно

      public void destroyApp(boolean unconditional) {} //необходимо предоставить пустые реализации, чтобы удовлетворить требованиям класса MIDLET

      public void commandAction(Command c, Displayable s) {

      if (c.getCommandType() == Command.EXIT) {

      destroyApp(true); //В конце следует вызвать метод destroyApp(), хотя на самом деле

      notifyDestroyed(); //работу мидлета завершает метод notifyDestroyed()

      }

      }

      }

      Оставшаяся часть кода мидлета Skeleton связана с классом SCanvas и представлена в листинге 3.2.

Листинг 3.2. Класс SCanvas служит как настраиваемый холст мидлета Skeleton

      import javax.microedition.lcdui.*;

      public class SCanvas extends Canvas {

      private Display display;

      public SCanvas(Display d) {

      super();

      display = d;

      }

      void start() {

      display.setCurrent(this); //Это весьма важный код, так как он устанавливает текущий холст для мидлета

      repaint();

      }

      public void paint(Graphics g) {

      // очистить холст

      g.setColor(0, 0, 0); // черный //Прежде чем начинать

      g.fillRect(0, 0, getWidth(), getHeight()); //рисование на холсте,

      g.setColor(255, 255, 255); // белый //необходимо очистить фон

      // вывести размер экрана

СКАЧАТЬ