Оценить:
 Рейтинг: 0

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

Год написания книги
2011
<< 1 ... 4 5 6 7 8 9 10 11 12 ... 23 >>
На страницу:
8 из 23
Настройки чтения
Размер шрифта
Высота строк
Поля

? как построить мидлет на основе шаблона, который отражает основную игровую информацию о мобильном телефоне;

? как подготовить мидлеты для распространения.

Знакомство с J2ME API

Перед тем, как погрузиться в программирование вашего первого мобильного приложения, необходимо познакомится с API, которые будут использованы при сборке мидлетов. Спецификация MIDP (Mobile Information Device Profile) – это набор правил, описывающий возможности и ограничения Java в отношении мобильных телефонов. Важной особенностью этих возможностей и ограничений является то, что они представляют собой набор классов и API, доступных для программирования мидлетов. Хотя спецификация MIDP дает подробное описание пакета API, который можно использовать для программирования мидлетов, дополнительные API предоставляет CLDC (Connected Limited Device Configuration). MIDP API построен на основе CLDC API и предоставляет классы и интерфейсы, ориентированные на программирование для мобильных телефонов. О CLDC можно думать как о средстве, предоставляющем основные Java API для сетевых устройств, в то время как MIDP предлагает более специфичные API, дополняющие CLDC API для компактных беспроводных устройств как мобильные телефоны и пейджеры.

Почему вы должны думать об этих спецификациях и API? Спецификации CLDC и MIDP очень важны, поскольку они явно определяют, какие классы и API можно использовать для создания мидлет. Мобильные устройства – это гибкие машины, не имеющие такой роскоши, как мегабайты памяти. По этой причине Sun пришлось найти способ создать базовый набор функций, выполняемых без потери производительности устройства. Решением стала разбивка конфигурации на более детализированные профили. CLDC API описывает базовые классы и интерфейсы, необходимые сетевым устройствам, в то время как MIDP API описывают интерфейсы и классы, необходимые мобильным информационным устройствам, например, сотовым телефонам. На рис. 3.1 показаны взаимосвязи между мидлетом, CLDC API и MIDP API.

Рис. 3.1. Чтобы выполнять большинство функций, мидлет должен делать вызовы CLDC API и MIDP API

Помните, что хотя CLDC API и MIDP API были тщательно подобраны с учетом необходимости компромисса между производительностью и необходимым размером памяти и ограничениями мобильных устройств, их в определенных случаях недостаточно.

Это означает, что в ряде случаев вам придется более тщательно прорабатывать мидлет игры, поскольку в вашем распоряжении нет широкого набора API, такого как в случае обычного программирования.

CDLC API

Большинство классов, включенных в CDLC API, происходят непосредственно из стандартного J2SE API. Эти классы и интерфейсы практически идентичны тем, которые вы, вероятно, использовали при обычном программировании на Java. Эта часть CLDC API находится в пакете со знакомыми из J2SE именами java.lang и java.util. Кроме классов и интерфейсов, заимствованных у J2SE, есть ряд особых классов CLDC API. Эти интерфейсы, главным образом, предназначены для работы с сетями, это касается той части J2SE API, которую практически очень сложно изменить в соответствии с потребностями сетевых устройств.

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

? набор пакетов, которые служат как подмножество J2SE API;

? набор основных сетевых интерфейсов.

Большая часть классов и интерфейсов, входящих в состав CLDC API, напрямую наследованы от J2SE API. J2ME требует, чтобы классы и интерфейсы, наследованные от J2SE, были неизменными. Это означает, что все методы и поля этих классов совпадают с методами и полями таких классов J2SE, что заметно облегчает обучение программированию в J2ME, а также делает код переносимым между J2SE и J2ME.

Но CLDC уходит в сторону от J2SE API в вопросах, касающихся работы в сети, и формирует сетевую оболочку, известную как Generic Connection Framework (GCF, Настраиваемая сетевая оболочка). GСF предназначен для определения общей архитектуры сети, поддерживающей сетевой ввод/вывод. Это весьма гибкая, а следовательно, расширяемая архитектура. Оболочка GCF разрабатывалась как функциональное подмножество сетевых классов J2SE, поэтому возможности GCF доступны в J2SE. GCF состоит из набора интерфейсов соединений, а также класса Connector, используемого для установления различных соединений. Класс Connector и интерфейсы соединений находятся в пакете javax.microedition.io. В главе 14 вы подробнее познакомитесь с программированием сетевых мобильных игр.

MIDP API

Профиль устройства выходит на первый план, когда отступает конфигурация и наступает черед более детального описания функций конкретного типа устройства. В случае Mobile Information Device Profile (MIDP) тип устройства – это беспроводное мобильное устройство, например, мобильный телефон или пейджер. Следовательно, MIDP должен взять CLDC API и надстроить необходимые классы и интерфейсы, позволяющие написание собираемых мидлетов, например, игровых.

MIDP API можно разделить на две части, подобно CLDC API:

? два класса, непосредственно наследованных от J2SE API;

? ряд пакетов, которые включают классы и интерфейсы, уникальные для разработки MIDP.

Подобно CLDC API, MIDP API также наследует от J2SE API. Неудивительно, что большая часть MIDP API – это новые классы и интерфейсы, специально разработанные для программирования мидлетов. Хотя эти классы и интерфейсы могут выполнять те же функции, что и некоторые классы и интерфейсы J2SE API, в целом они уникальны для MIDP API, а следовательно, тщательно проработаны для решения специфичных для мидлетов задач. Эта часть MIDP API разделена на несколько пакетов, каждый из которых следует за именем javax.microedition:

? javax.microedition.midlet;

? javax.microedition.lcdui;

? javax.microedition.lcdui.game;

? javax.microedition.media;

? javax.microedition.media.control;

? javax.microedition.io;

? javax.microedition.pki;

? javax.microedition.rms.

Пакет javax.microedition.midlet – это центральный пакет в MIDP API, он включает в себя единственный класс MIDlet. Класс MIDlet содержит основные функции, необходимые для MIDP-приложения (мидлета), которые могут выполняться на мобильном устройстве. По мере прочтения книги и построения более сложных мидлетов вы более подробно познакомитесь с этим классом.

Пакеты javax.microedition.lcdui и javax.microedition.lcdui.game включают классы и интерфейсы, которые поддерживают GUI-компоненты, специально предназначенные для маленьких экранов мобильных устройств. Кроме того, в этих пакетах содержатся классы и интерфейсы, специально разработанные для создания мобильных игр. Уникальные возможности, такие как, например, анимация спрайтов и управление слоями, делают эти пакеты чрезвычайно ценными для программирования мобильных игр. Чуть позже в этой главе вы начнете свое знакомство с некоторыми из этих классов и пакетов, а при дальнейшем прочтении книги будете углублять свои знания.

В копилку Игрока

Если вам доводилось работать с J2ME ранее, то вам, вероятно, будет интересно узнать, что пакет javax.microedition.ldui.game появился только в MIDP 2.0. Вот почему MIDP 2.0 представляет собой значительное продвижение вперед и укрепление позиций J2ME как технологии мобильных игр.

Пакеты javax.microedition.media и javax.microedition.media.control содержат классы и интерфейсы для управления звуком в мидлете. Эти пакеты представляют MIDP 2.0 Media API, который является подмножеством более обширного Mobile Media API. Полный Mobile Media API поддерживает большое число медиа-объектов, например, изображения, звуки, музыку и видео. Возможности по работе с медиа-данными в MIDP 2.0 API ограниченны и сведены к генерации тонов и воспроизведению цифровых звуковых эффектов через wave-файлы. О специфике воспроизведения звука я расскажу в главе 8.

Ранее вы узнали, что CLDC служит основой для работы в сетях и ввода/вывода с помощью Generic Connection Framework (GCF). Надстройкой MIDP API над этим является пакет javax.microedition.io, который включает в себя ряд интерфейсов и классов для установления беспроводных соединений с сетями и обмена данными. Пакет javax.microedition.pki используется в сочетании с пакетом javax.microedition.io для выполнения защищенных соединений. В главе 14 вы узнаете, как выполнять основные сетевые задачи.

Поскольку мобильные телефоны не имеют жестких дисков или явной файловой системы (пока), вы, вероятно, не станете полагаться на файлы для хранения постоянных данных мидлетов. Вместо этого MIDP API предлагает другой вариант сохранения и доступа к постоянным данным мидлета – Record Management System (RMS, Система управления записями). MIDP RMS реализует простой API базы данных (основанный на записях) для постоянного хранения данных, например, список лучших достижений или данных сохраненных игр. Классы и интерфейсы, составляющие RMS, содержатся в пакете javax.microedition.rms.

Понятие о мидлетах

Sun Microsystems использует суффикс «let» для обозначения различных типов программ, создаваемых с помощью Java. Апплеты (applet), сервлеты (servlet), спотлеты (spotlet) и теперь мидлеты (MIDlet) – это лишь часть из них. Мидлеты – это программы, разработанные с использованием J2ME API, которые запускаются в мобильной среде. Мидлетам требуется особая среда выполнения. Эта среда главным образом состоит из менеджера приложений (application manager), который выполняет функции выбора и запуска мидлетов на мобильном устройстве. Этот менеджер приложений для мидлетов отвечает за создание обрамляющего окна мидлета.

Внутри мидлета

Пожалуй, не столь удивительно, что каждый мидлет должен быть производным от стандартного класса, являющегося частью MIDP API. Этот класс расположен в пакете javax.microedition.midlet и носит название MIDlet. Хотя этот класс определяет несколько методов, три из них очень важны для разработки собственных мидлетов:

? startApp() – запустить мидлет;

? pauseApp() – приостановить выполнение мидлета;

? destroyApp() – удалить мидлет.

Чтобы лучше понять, как эти методы влияют на мидлет, важно уяснить, что мидлет имеет три различных состояния, определяющих его работу: Active (Активное), Paused (Приостановленное) и Destroyed (Разрушенное). Этим трем состояниям соответствуют три метода, которые обычно напрямую вызываются менеджером приложения среды выполнения. В некоторых случаях вы можете вызывать их самостоятельно, особенно метод destroyApp(). Эти методы объединены термином «методы жизненного цикла» (life cycle methods), потому что они управляют жизненным циклом мидлета. Именно эти методы позволяют менеджеру приложений управлять несколькими мидлетами и предоставлять каждому из них доступ к ресурсам устройства.

Жизненный цикл мидлета

Жизненный цикл состоит из трех частей, о которых вы только что узнали. В обычном мидлете большая часть времени проходит в состояниях Active и Paused, а при закрытии мидлета он переходит в состояние Destroyed до тех пор, пока не будет полностью удален из памяти. В большинстве случаев вы переопределяете методы жизненного цикла мидлета, потому как важно выделять и высвобождать ресурсы мобильного телефона в соответствии с каждым из состояний. Например, при запуске игрового мидлета, вероятно, возникает необходимость создать объекты и/или загрузить данные. Когда выполнение мидлета приостанавливается, целесообразно высвободить часть ресурсов, закрыть соединения с сетью и приостановить воспроизведение музыки в игре. И, наконец, при условии разрушения мидлета необходимо высвободить память, а также сохранить нужные данные.

Помните, что мидлет может входить и выходить из состояний Active и Paused не один раз в течение жизненного цикла. Но если мидлет войдет в состояние Destroyed, он уже не сможет вернуться обратно. С этой точки зрения, отдельный игровой мидлет может прожить лишь одну жизнь.

Команды мидлета

Кроме переопределения методов жизненного цикла, большинство мидлетов реализуют метод commandAction(), обработчик событий, определенный интерфейсом javax.microedition.ldui.CommandListener. Команды используются для контроля игровых мидлетов и инициализации таких действий, как приостановка игры, сохранение данных, изменение настроек и выход из игры. Команды мидлета доступны через экранные кнопки (soft button) или меню и должны обрабатываться методом commandAction().

В копилку Игрока
<< 1 ... 4 5 6 7 8 9 10 11 12 ... 23 >>
На страницу:
8 из 23