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

Шрифт
Интервал

public class SkeletonMIDlet extends MIDlet implements CommandListener }

Не удивительно, что класс SkeletonMIDlet расширяет MIDlet, но вот реализация интерфейса CommandListener может показаться весьма странной. Этот интерфейс необходим для создания команды Exit, которая позволяет пользователю выходить из мидлета. Если говорить более подробно, то интерфейс CommandListener реализован таким образом, чтобы мидлет мог отвечать на командные события. Единственная переменная, член класса SkeletonMIDlet, – это объект SCanvas, который представляет главный экран:

private SCanvas canvas;

Класс SCanvas – это особый класс мидлета, производный от класса Canvas. Холст инициализируется в методе startApp():

public void startApp() {

if (canvas == null) {

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

Command exitCommand = new Command("Exit", Command.EXIT, 0); //Создаем команду EXIT и добавляем ее в

canvas.addCommand(exitCommand); //класс Canvas. Теперь canvas сможет отвечать на эту команду

canvas.setCommandListener(this);

}

// Start up the canvas

canvas.start();

}

Метод startApp() вызывается при переходе мидлета в состояние Active, первым шагом является создание холста. Объект Display мидлета создается и передается при создании холста. Команда Exit создается путем передачи конструктору трех параметров: названия команды, ее типа и приоритета. Имя команды определяется пользователем и появляется как экранная кнопка на дисплее устройства в зависимости от приоритета и количества доступных кнопок. Тип команды должен быть определен одной из трех предопределенных констант – EXIT, OK или CANСEL. Команда добавлена на холст, поэтому она становится активной. Но все еще необходимо настроить приемник команд для перехвата и обработки командных событий. Для этого вызывается метод setCommandListener(), которому передается параметр this, в результате класс мидлета (SkeletonMIDlet) становится приемником команд. Это замечательно, потому как ранее вы указали для имплементации класса интерфейс CommandListener().

...

Совет Разработчику

Приоритет команды используется для определения доступности команды пользователю. Это необходимо из-за того, что большинство устройств имеет ограниченный набор клавиш для использования мидлетами. Следовательно, только самые важные команды могут быть связаны с экранными кнопками. Другие команды используются через меню, доступ к которому мидлету получить не так уж и просто. Чем важнее команда, тем меньше номер ее приоритета. Например, значение 1 соответствует команде с наивысшим приоритетом, а в примере Skeleton команде Exit присвоен приоритет 2, что соответствует высокой важности команды. Конечно, значения приоритетов относительны, и поскольку в рассматриваемом примере не используются другие команды, то численное значение приоритета в данном случае не существенно.

Команда 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


Рекомендуем почитать
Программное обеспечение и его разработка

Автор книги — американский специалист по программированию, один из руководителей фирмы IBM, в своей книге делает попытку изложить общие проблемы создания программного обеспечения, его сопровождения и использования. Особенно подробно рассматриваются все фазы разработки программ разных типов. Изложение ясное, удачно иллюстрировано примерами.Для программистов разной квалификации и пользователей ЭВМ.fb2: ВНИМАНИЕ. В тексте присутствуют таблицы. Рекомендуется читать файл с помощью программы, поддерживающей их отображение.


Программирование приложений для мобильных устройств под управлением Android. Часть 1

Книга посвящена разработке программ для мобильных устройств под управлением операционной системы Android. Рассматривается создание приложений с использованием системных компонентов и служб Android. Приведены базовые данные о структуре приложений, об основных классах и их методах, сопровождаемые примерами кода. Часть 1 содержит шесть глав, описывающих основные принципы создания приложений, пользовательский интерфейс, полномочия приложений, а так же базовые классы: Activity, Intent, Fragment. Книга предназначена для программистов, владеющих языком программирования Java и желающих освоить написание приложений, работающих под ОС Android.


Создание инструмента научных исследований на основе XML: Проблемы и методология

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


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


Тонкости дизассемблирования

Очень часто под рукой не оказывается ни отладчика, ни дизассемблера, ни даже компилятора, чтобы набросать хотя бы примитивный трассировщик. Разумеется, что говорить о взломе современных защитных механизмов в таких условиях просто смешно, но что делать если жизнь заставляет?..