Компиляция и запуск приложения
Компиляция и запуск приложения
Давайте проверим работоспособность нашей программы на практике. Запустите пакет J2ME Wireless Toolkit. Для этого откройте папку WTK22in (по умолчанию она расположен на диске C:) и запустите файл ktoolbar.exe. Отроется окно, представленное на рис. 6.21.
Рис. 6.21. Окно программы J2ME Wireless Toolkit.
Теперь создадим новый проект. Для этого нажмите кнопку New Project (Новый проект), расположенную в левом верхнем углу окна. Перед вами появится окно, изображенное на рис. 6.22.
Рис. 6.22. Окно создания нового проекта.
Поле Project Name (Имя проекта) содержит название вашего проекта. То, что вы введете в это поле, будет отображаться как название программы. Введите в него MyProject.
Поле MIDlet Class Name (Имя класса MIDlet) содержит название главного класса приложения, с которого будет начинаться выполнение программы. Содержимое поля MIDlet Class Name (Имя класса MIDlet) и название главного класса обязательно должны совпадать. Введите в этом поле MyClass.
После завершения ввода нажмите кнопку Create Project (Создать проект). Появится окно, содержащее сведения о свойствах проекта (рис. 6.23).
Рис. 6.23. Свойства проекта.
В свойствах проекта ничего менять не станем, оставим все как есть. Просто нажмите кнопку OK. Можно считать, что проект создан. Об этом свидетельствует содержимое консоли пакета J2ME Wireless Toolkit.
Пора вносить программный код. Перейдите в папку WTK22apps, в ней вы увидите вложенную папку MyProject – это и есть каталог нашего проекта. Внутри MyProject находится папка src, содержащая программный код проекта. На данный момент папка пуста, так как никакого кода мы туда не добавляли.
Создайте в папке src файл с именем MyMIDlet.java, затем откройте его в текстовом редакторе (щелкните правой кнопкой мыши на файле и в появившемся контекстном меню выполните команду Открыть с помощью > Блокнот). Введите в файл код из листинга 6.3.
Листинг 6.3. Код программы
Теперь сохраните содержимое файла, используя сочетание клавиш Ctrl+S, или команду Файл > Сохранить.
Сейчас вернитесь к J2ME Wireless Toolkit. Нажмите кнопку Build (Компиляция), чтобы скомпилировать проект. Если все прошло нормально, то есть проект не содержит ошибок, то в консоли должна появиться строка Build complete (Компиляция завершена).
Проверим, как программа работает. Нажмите кнопку Run (Исполнить), расположенную в верхней части окна. На экране появится эмулятор мобильного телефона (рис. 6.24).
Как видите, в качестве названия программы отображается MyProject, о чем уже упоминалось ранее.
Чтобы запустить программу, нажмите кнопку Launch (Запуск) на эмуляторе. Поскольку программа не выполняет никаких операций с экраном, то на экране эмулятора вы не увидите изменений, но в консоли будет выведено Вход, что свидетельствует о том, что программа все-таки корректно работает. Поскольку корректного выхода у нас не предусмотрено, то придется воспользоваться старым добрым методом – выключением телефона. Просто закройте окно эмулятора, нажав кнопку с крестиком. Перед выходом в консоль будет выведено Выход, затем окно эмулятора закроется, и в консоль будет выведена служебная информация о программе. В результате J2ME Wireless Toolkit будет выглядеть примерно так, как показано на рис. 6.25.
Итак, «скелет» приложения можно считать готовым. Однако до сих пор наши творения хоть и работали, но ничего не выводили на экран. Это нужно исправить.
Для начала немного теории. Дело в том, что само приложение, то есть класс MIDlet, рисовать не умеет. Для отображения графики существует специальный класс Canvas, а также его усовершенствованная версия – класс GameCanvas.
Рис. 6.24. Окно эмулятора телефона.
Рис. 6.25. Консоль вывода WTK.
Само слово «canvas» можно перевести с английского как «холст». Из этого следует, что класс Canvas предназначен для работы с графическими объектами, но не только. Он является базовым при разработке приложений, требующих низкоуровневой работы с экраном (то есть рисования), обработки нажатий клавиш (без этого в играх никуда), работы с джойстиком (если таковой имеется), а также для других полезных возможностей.
Его наследник, класс GameCanvas, умеет немного больше. В добавление к стандартным возможностям он умеет проверять состояние клавиш, поддерживает двойную буферизацию изображений (что значительно улучшает качество анимации) и др. Как видите, GameCanvas имеет больше возможностей, поэтому с ним мы и будем работать. Ниже приведены описания основных его методов.
• int getHeight – возвращает высоту экрана в пикселах.
• int getwidth – возвращает ширину экрана в пикселах.
• void paint(Graphics g) – этот метод должен содержать код, отвечающий за рисование. Graphics – объект класса Graphics, с помощью которого будет производиться рисование.
• Graphics getGraphics() – получает объект, с помощью которого и будет осуществляться рисование на экране.
• void flushGraphics() – отображает содержимое графического буфера на дисплей.
• void keyPressed(int keyCode) – этот метод вызывается, если была нажата какая-либо клавиша. keyCode – содержит код нажатой клавиши.
• void keyReleased (int keyCode) – метод вызывается, если какая-либо клавиша была отпущена. keyCode – содержит код нажатой клавиши.
С остальными методами вы познакомитесь в дальнейшем, в процессе написания программ.
Почти все готово, однако есть одно «но». Как уже упоминалось, класс Canvas является лишь холстом, а ведь для рисования нужен не только холст – очень пригодятся «кисти» и «краски». Инструменты для рисования содержатся в классе Graphics. Ниже представлено несколько его методов.
• void drawArc(int х, int у, int width, int height, int startAngle, int arcAngle) – рисует дугу эллипса:
– x – координата X левого верхнего угла прямоугольника, в который будет вписан эллипс;
– у – координата Y левого верхнего угла прямоугольника, в который будет вписан эллипс;
– width – ширина эллипса;
– height – высота эллипса;
– startAngle – начальный угол дуги;
– arcAngle – длина дуги в градусах.
• void drawLine(int x1, int y1, int x2, int y2) – рисует прямую линию:
– xl – координата Х начала линии;
– yl – координата Y начала линии;
– х2 – координата Х конца линии;
– у2 – координата Y конца линии.
• void drawRect(int х, int у, int width, int height) – рисует прямоугольник:
– x – координата Х левого верхнего угла прямоугольника;
– у – координата Y левого верхнего угла прямоугольника;
– width – ширина прямоугольника;
– height – высота прямоугольника.
• void drawRoundRect(int х, int у, int width, int height, int arcWidth, int arcHeight) – рисует прямоугольник с закругленными углами:
– х – координата Х левого верхнего угла прямоугольника;
– у – координата Y левого верхнего угла прямоугольника;
– width – ширина прямоугольника;
– height – высота прямоугольника;
– arcWidth – ширина закругленного угла;
– arcHeight – высота закругленного угла.
• void drawString(String str, int x, int y, int anchor) – рисует строку:
– str – указатель на строку символов;
– х – координата Х левого верхнего угла строки;
– у – координата Y левого верхнего угла строки;
– anchor – тип выравнивания строки.
• void fillArc(int х, int у, int width, int height, int startAngle, int arcAngle) – рисует залитый сектор эллипса (описание параметров см. для drawArc() ).
• void fillRect(int х, int у, int width, int height) – рисует залитый прямоугольник (описание параметров см. для drawRect() ).
• void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) – рисует залитый прямоугольник с закругленными углами (описание соответствующих параметров см. для drawRoundRect() ).
• void fillTriangle(int x1, int y1, int x2, int y2, int x3, int y3) – рисует залитый треугольник:
– x1, х2, хЗ – координаты Х первой, второй и третьей вершины треугольника соответственно;
– y1, у2, уЗ – координаты Y первой, второй и третьей вершины треугольника соответственно.
• int getColor() – получает текущий цвет в формате RGB.
• void setColor(int red, int green, int blue) – устанавливает текущий цвет в формате RGB:
– red – интенсивность красного цвета (0-255);
– green – интенсивность зеленого цвета (0-255);
– blue – интенсивность синего цвета (0-255).
Инструментов очень много, и подробное их рассмотрение выходит за рамки этой книги, но, поняв принцип рисования, все, что вам нужно будет, – это обратиться к соответствующей документации.
Создадим код класса GameCanvas. Как уже упоминалось выше, код каждого класса должен находиться в отдельном файле. Так что найдите папку src нашего проекта и создайте там файл GameCanv.java.
Теперь откройте файл с помощью текстового редактора и введите базовый код класса (листинг 6.4).
Листинг 6.4. Базовый код класса
Этот класс пока ничего «не умеет». Для начала нужно создать переменную для хранения объекта Graphics, с помощью которой будет производиться рисование. Затем нужно этот самый объект получить, лучше всего это сделать в конструкторе.
Теперь немного модифицируем метод paint и добавим в него код заливки экрана определенным цветом.
В результате код нашего класса примет вид, представленный в листинге 6.5.
Листинг 6.5. Код заливки экрана определенным цветом
Итак, «холст» объявлен и обучен нехитрым действиям. Теперь нам нужно отобразить его на экране. Для этого доработаем главный класс нашего приложения. Новый код вы можете видеть в листинге 6.6.
Листинг 6.6. Отображение «холста» на экране
Теперь скомпилируйте и запустите приложение. После того как вы нажмете кнопку Launch (Запуск), экран окрасится в серый цвет.
Вы можете поэкспериментировать со значениями параметров метода setColor. Таким образом вы сможете менять цвет заливки экрана. Только помните, что значение каждого параметра должно находиться в пределах от 0 до 255, иначе вы получите ошибку компиляции.
Доработаем метод paint класса GameCanv и добавим на экран немного фигур. Новый код метода вы можете видеть в листинге 6.7.
Листинг 6.7. Добавление фигур
При запуске программы экран будет выглядеть так, как представлено на рис. 6.26.
Рис. 6.26. Геометрические фигуры на экране эмулятора.
«Научим» объект двигаться. У класса GameCanvas существует метод keyPressed(int keyCode). Он срабатывает, когда пользователь нажимает какую-либо клавишу на телефоне. Причем параметр keyCode содержит код нажатой клавиши, так что вы без труда определите, что именно было нажато.
Для хранения координат объекта (в нашем случае кружка) воспользуемся переменными и будем их менять, когда пользователь нажмет на клавишу джойстика.
Ниже представлены числовые коды клавиш джойстика (табл. 6.1).
Таблица 6.1. Коды клавиш
При рисовании кружка не будем задавать координаты жестко, а укажем, что они содержатся в переменных X и Y. В листинге 6.8 представлен полный код класса GameCanv.
Листинг 6.8. Полный код класса GameCanv
Поэкспериментируйте с различными фигурами. Проявите творчество!
На этом закончим знакомство с языком Java для мобильных телефонов. Вы получили базовые сведения, необходимые начинающему разработчику. Продолжайте изучение этого языка – и скоро сможете писать полноценные игры для мобильных телефонов.
Данный текст является ознакомительным фрагментом.