Текст книги "Создание игр для мобильных телефонов"
Автор книги: Майкл Моррисон
сообщить о нарушении
Текущая страница: 4 (всего у книги 35 страниц) [доступный отрывок для чтения: 13 страниц]
J2ME Wireless Toolkit – это набор инструментов для разработки, созданный компанией Sun Microsystems, который при использовании с J2ME SDK позволяет разрабатывать MIDP-приложения. Пакет J2ME Wireless Toolkit вы найдете на прилагаемом CD, а на сайте http://java.sun.com/products/j2mewtoolkit/ вы можете проверить последние обновления. Пакет состоит из следующих инструментов:
► верификатор байт-кода;
► эмулятор J2ME;
► KToolbar;
► инициализирующий сервер.
Вы уже узнали, что верификатор байт-кода проверяет классы, входящие в состав игры, перед тем как они попадут в распространяемый пакет. Вы также знаете, что эмулятор J2ME используется для тестирования приложений на настольном компьютере, не загружая и не запуская их на реальном мобильном телефоне. Полезные функции эмулятора позволят вам имитировать различные мобильные телефоны. Например, вам, вероятно, понадобится эмулировать мобильный телефон с определенным размером экрана, отличным от стандартных устройств, в этом случае вы просто создаете новую конфигурацию и эмулируете мобильный телефон с новыми параметрами. Эмулятор J2ME также очень полезен при имитации настроек безопасности мобильных телефонов, что позволит создать более реалистичную среду выполнения.
KToolbar – это среда визуальной разработки, в которой можно собирать, компилировать, упаковывать и тестировать приложения J2ME с графическим интерфейсом. Это контрастирует с другими инструментами J2ME, которые запускаются из командной строки. Далее вы будете часто использовать KToolbar для сборки и тестирования приложений.
В платформе MIDP 2.0 новинкой является поддержка инициализации Over The Air (по сети), или OTA, которая реализует механизм загрузки приложений в мобильные телефоны через беспроводную сеть. Пакет J2ME Wireless Toolkit включает инициализирующий сервер, который позволяет загружать и устанавливать приложение на эмулируемое устройство точно так же, как это будет делать пользователь, загружая приложение на мобильное устройство.
В копилку Игрока
Инициализация (provisioning) – это процесс верификации и установки мидлета на телефон, поддерживающий Java К сожалению, до MIDP 2.0 не было стандарта инициализации мидлетов, поэтому процесс загрузки и инициализации определялся изготовителем телефона.
В этом уроке я часто буду обращаться к среде разработки и показывать, как она улучшает и ускоряет процесс разработки и сборки мидлетов. KToolbar – это самая простая среда визуальной разработки, поддерживающая J2ME. Она настолько проста, что даже не содержит редактора кода. KToolbar сфокусирован на управлении файлами кода и автоматизации процесса сборки и тестирования. Используя приложение KToolbar, вы можете преодолеть необходимость использования командной строки инструментов J2ME и выполнить компиляцию, верификацию и эмуляцию в одной среде. На рис. 2.1 показано приложение KToolbar, в котором открыт проект J2ME.
Рис. 2.1. KToolbar предоставляет минимальные средства для разработки игр на J2ME
Хотя инструмент KToolbar – это минимальная визуальная среда, его достоинство заключается в том, что он бесплатно поставляется вместе с J2ME Wireless Toolkit. Просто помните, что вам придется найти подходящий текстовый редактор (например, Блокнот (Notepad) в операционной системе Windows) для редактирования файлов кода. С другой стороны, если у вас уже есть визуальная среда разработки Java, даже если она не поддерживает J2ME, ее полезно использовать для редактирования файлов кода J2ME.
KToolbar предлагает простой способ управления проектами мидлетов и настройками сборки. Когда вы создаете новый проект в KToolbar, он автоматически появляется в папке apps, расположенной в папке установки J2ME Wireless Toolkit. Так, например, если Wireless Toolkit установлен в папке WTK21, то все приложения будут создаваться в папке WTK21apps. Чтобы создать новый проект, щелкните по кнопке New Project (Новый проект), расположенной на панели инструментов. На рис. 2.2 показано диалоговое окно, в котором запрашивается название проекта и имя класса мидлета.
Рис. 2.2. Чтобы создать новый проект в KToolbar, просто введите имя проекта и название класса мидлета
Имя проекта будет использовано для названия JAR-файла, который устанавливается на мобильный телефон. Помните, что имя проекта может применяться ко всему пакету мидлетов, в то время как имя класса идентифицирует отдельный мидлет внутри пакета. В большинстве случаев в проекте содержится лишь один мидлет, поэтому вы можете использовать одно и то же имя как для класса мидлета, так и для приложения.
Чтобы открыть существующий проект в KToolbar, на панели инструментов щелкните по кнопке Open Project (Открыть проект). Будут отображены проекты, созданные в папке apps, расположенной в папке установки J2ME Wireless Toolkit. На рис. 2.3 показано диалоговое окно Open Project (Открыть проект), в котором вы можете выбрать проект, хранящийся в папке apps.
Рис. 2.3. В KToolbar можно открывать только те проекты, которые находятся в папке apps пакета J2ME Wireless Toolkita
После того как проект открыт в KToolbar, вы можете изменить его настройки, для чего щелкните по кнопке Settings (Настройки), расположенной на панели инструментов. Откроется диалоговое окно Settings (Настройки), показанное на рис. 2.4.
Рис. 2.4. Диалоговое окно Settings (Настройки) инструмента KToolbar предоставляет вам доступ к большому числу настроек проекта
Пока настройки проекта не очень важны, поскольку в большинстве случаев подходят и настройки по умолчанию. Возможно, единственное, чему стоит уделить внимание, так это закладке MIDlet, на которой показаны мидлеты, входящие в состав проекта. На рис. 2.5 показаны три различных мидлета, содержащихся внутри одного проекта.
Рис. 2.5. Проект в KToolbar может состоять из нескольких мидлетов, при этом проект представляет собой пакет мидлетов
Игровой проект, показанный на рис. 2.5, содержит две игры-головоломки и игру Worm. Давайте, используя KToolbar, откомпилируем и упакуем эти игры, а потом протестируем их.
Теперь вы подошли, вероятно, к самой трудной части главы: компиляции примера мидлета игры. На самом деле мы будем компилировать все три мидлета игр, входящие в проект J2ME Wireless Toolkit. Я пошутил, говоря, что это будет очень сложно. Достаточно щелкнуть по кнопке Build (Собрать), расположенной на панели инструментов, и проект будет собран. На рис. 2.6 показан процесс сборки в KToolbar.
Рис. 2.6. Использовать KToolbar для сборки мидлетов или их пакетов очень просто, для этого щелкните по кнопке Build (Собрать), расположенной на инструментальной панели
Хотя процесс сборки включает в себя несколько отдельных шагов, они обычно выполняются так быстро, что их очень трудно различить. На рис. 2.6 показана завершающая стадия построения проекта. Теперь у вас есть верифицированный, откомпилированный и собранный пакет мидлетов, который можно установить и запустить на мобильном телефоне или протестировать в эмуляторе J2ME.
Эмулятор J2ME бесценен при тестировании мидлетов игр в процессе разработки. Эмулятор целесообразно использовать ввиду трудностей, возникающих при загрузке кода на реальное устройство снова и снова. Намного эффективнее тестировать мидлеты на настольном компьютере, а к проверке работы на реальных устройствах переходить на поздних этапах отладки.
Чтобы запустить эмулятор J2ME в KToolbar, на инструментальной панели щелкните по кнопке Run (Запустить). На рис. 2.7 показано, как игры из пакета мидлетов отображаются в эмуляторе.
Рис. 2.7. По умолчанию в эмуляторе J2ME имитируется телефон с разноцветной лицевой панелью и экраном с размерами 180х210
Как показано на рис. 2.7, эмулятор J2ME отображает изображение телефона, на экране которого выводится состав тестируемого пакета мидлетов. Чтобы запустить одно из приложений мидлета, выберите нужный, щелкая мышью по кнопкам телефона, после чего нажмите кнопку Launch (Запустить). Вы можете также использовать клавиши со стрелками на клавиатуре компьютера, после чего нажать клавишу Enter (Ввод). На рис. 2.8 показана игра Worm при ее выполнении в эмуляторе с настройками телефона по умолчанию.
Рис. 2.8. Игра Worm – хороший пример простого игрового мидлета
Пример игры Worm – это вариация известной игры Snake, о которой вы узнали в предыдущей главе. Поиграйте немного в игру и поэкспериментируйте с эмулятором. Когда закончите и закроете окно эмулятора, попробуйте другую конфигурацию устройства, которую можно выбрать из выпадающего меню инструмента KToolbar. На рис. 2.9 показана игра PushPuzzle, эмулированная на устройстве с конфигурацией Qwerty.
Рис. 2.9. Конфигурация устройства Qwerty позволяет эмулировать выполнение игр на устройстве, похожем на мобильный телефон с полной клавиатурой
Как видно, эмулятор весьма гибок при имитации мобильных устройств, его можно эффективно использовать как базис для разработки мидлетов игр.
В копилку Игрока
Как и в случае любых инструментов из пакета J2ME, эмулятор можно запустить непосредственно из командной строки. Однако KToolbar делает использование эмулятора много проще и избавляет вас от необходимости использования командной строки.
Хотя при выборе приложения вы можете попытаться щелкать мышью непосредственно по экрану эмулируемого телефона, помните, что вы должны управлять телефоном, используя только щелчки мыши по кнопкам на корпусе телефона и клавиши клавиатуры.
Эмулятор J2ME и реальные устройстваВ копилку Игрока
Если вы хотите протестировать примеры игр на реальном мобильном телефоне, вам необходимо прочитать документацию к своему телефону. Не загружая игры через сеть (речь об этом пойдет чуть позже), для загрузки вы, вероятно, можете использовать USB-кабель или беспроводное Bluetooth-соединение. Но это зависит от вашей модели телефона.
J2ME Wireless Toolkit создан как многоцелевой пакет инструментов разработки J2ME, предназначенный для программирования приложений для большого числа различных моделей телефонов. По этой причине вы не найдете ни одного названия компании производителя и ни одной модели телефона в J2ME Wireless Toolkit. Если говорить подробнее, то J2ME Wireless Toolkit поддерживает эмуляцию следующих типов устройств:
► телефон с черно-белым дисплеем;
► устройство Qwerty;
► телефон с цветным дисплеем;
► Media-обложка.
Первые два типа устройств наиболее важны для эмуляции игр на мобильных телефонах, хотя, вероятно, вам понадобится протестировать игры на других типах устройств. В таблице 2.1 приведены характеристики каждого из типов устройств.
Таблица 2.1. Мобильные устройства, поддерживаемые J2ME Wireless Kit
Таблица отражает возможности J2ME по эмуляции различных устройств. Обратите внимание, что все устройства, кроме поддерживающих Qwerty, имеют вертикально-ориентированный экран. Телефоны с черно-белыми экранами поддерживают отображение 256 оттенков серого цвета, а остальные устройства поддерживают 256 цветов. Также устройства отличаются и клавиатурами. Устройства типа Qwerty имеют полную клавиатуру Qwerty, похожую на клавиатуру обычного компьютера. Такие устройства имеют больший размер, по сравнению с обычным мобильным телефоном, подобные модели выпускаются фирмой Research In Motion (RIM). Клавиатура типа ITU-T – это типичная клавиатура мобильных телефонов.
Хотя основные типы устройств, представленные в J2ME Wireless Toolkit, полезны для тестирования мидлетов игр, при этом не указываются конкретные модели и изготовители, но, вероятно, вам потребуется использовать телефон с более конкретными параметрами. Самый простой способ сделать это – запустить J2ME Wireless Toolkit, поставляемый конкретным производителем. Например, инструменты J2ME, предлагаемые Motorola или Nokia, содержат эмуляторы всех основных производимых устройств с поддержкой Java. Тестируя мидлеты игр в эмуляторах этих устройств, вы можете с большой степенью точности увидеть, как работает мидлет на реальном устройстве, как он смотрится на экране.
РезюмеПеред тем как более детально погрузиться в J2ME Wireless Toolkit, вы познакомились с основами разработки компьютерных игр. Хотя они и не высечены на камне, ими полезно руководствоваться при начале работы над своим шедевром. В этой главе было уделено внимание пакету J2ME Wireless Toolkit, а также его специальным инструментам, дающим возможность собирать мобильные Java-игры.
Вы узнали, что эмулятор J2ME – это особая часть пакета разработки J2ME, он позволяет тестировать мидлеты на настольном компьютере без необходимости загрузки в реальное устройство. Вам, конечно, придется проверять разработанное приложение и на настоящем устройстве, однако эмулятор позволяет ускорить процесс разработки и тестировать приложения на реальных устройствах в случаях крайней необходимости. Вы узнали о стандартном эмуляторе J2ME, который входит в состав пакета J2ME Wireless Toolkit, а также – как его можно усовершенствовать для эмуляции особых моделей мобильных телефонов.
ЭкскурсияУделите немного времени и поиграйте с эмулятором J2ME и тремя играми, которые были включены в состав J2ME Wireless Toolkit. Если вы хотите чего-то большего, посетите сайт одного из производителей мобильных телефонов, например, Motorola или Nokia, и загрузите пакет J2ME SDK, разработанный для конкретных моделей производимых ими телефонов. Вы сможете эмулировать продаваемый телефон, что много интереснее, нежели эмулятор стандартных телефонов, входящий в состав J2ME Wireless Toolkit.
Глава 3
Создание мобильной игры Skeleton
Архив Аркад
Игра Galaxian, выпущенная компанией Namco в 1979 году, была первой игрой жанра «космический шутер», наследницей Space Invaders. Galaxian – предшественница игры Galaga, которая, вероятно, является самой успешной игрой всех времен в своем жанре. В Galaxian, как и в любой другой игре жанра «космического шутера», вы управляете космическим кораблем, перемещающимся вдоль нижнего края экрана и вверх при атаке кораблей противника. Galaxian занимает особое место в истории видеоигр, потому что это первая аркада с RGB-графикой.
Разработка на языке Java связана со знанием Java и набора API, которые обеспечивают поддержку сервисов приложений (например, GUI-компоненты, работу в сетях, и ввод/вывод). В этом смысле разработка мобильных приложений на Java ничем не отличается, здесь также есть набор API для поддержки различных процессов, необходимых мидлетам игр для нормальной работы в беспроводной мобильной среде. Чтобы стать разработчиком мобильных игр, необходимо понять эти API и их назначение. В данной главе вы познакомитесь с API мобильного Java и пройдете стадию разработки «скелета» игры. Такой «скелет» мидлета послужит как шаблон для разработки игр во всей книге.
Прочитав эту главу, вы узнаете:
► как программирование на J2ME разбивается на несколько различных API;
► о внутренней структуре мидлетов;
► как построить мидлет на основе шаблона, который отражает основную игровую информацию о мобильном телефоне;
► как подготовить мидлеты для распространения.
Знакомство с 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, происходят непосредственно из стандартного 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 вы подробнее познакомитесь с программированием сетевых мобильных игр.
Профиль устройства выходит на первый план, когда отступает конфигурация и наступает черед более детального описания функций конкретного типа устройства. В случае 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.