Программирование двухмерных игр на J2ME
ОГЛАВЛЕНИЕ
Введение
J2ME – это интересная среда для игр. Имея базовые знания Java, заранее установленные NetBeans и J2ME Wireless Toolkit (беспроводной инструментарий J2ME), вы можете создавать простые, забавные двухмерные игры, которые можно запускать на ваших собственных мобильных устройствах.
В этой статье показано использование интерфейса прикладного программирования (API) 5-класса Game,скомпонованного в пакет javax.microedition.lcdui.game.
Предпосылки
Здесь предполагается, что вы имеете базовые знания Java, знакомы с NetBeans и прочитали статью “Введение в программирование на Java ME”. Создание игр также требует определенных знаний физики, включая динамику Ньютона, движения, столкновения, и так далее.
Недавно мы принимали участие в проекте под названием “Интенсивные программы разработки приложений для мобильных устройств”, организованном нашим университетом и его партнерами. Проект финансировался Uramus - программой поддержки студенческого обмена между европейскими странами. Мы начали работать с J2ME, что в итоге привело к написанию этой статьи.
Использование GameBuilder облегчает процесс разработки игры. Однако он не будет подробно описываться в данной статье. Подробную информацию о разработке игр с помощью GameBuilder можно найти здесь.
Использование кода
MainMidlet (главный мидлет)
Как и Midlet, MainMidlet должен расширять абстрактный класс Midlet, который можно найти в пакете javax.microedition.midlet. Midlet требует переопределения трех методов:
- startApp(), вызываемого для запуска игры
- pauseApp(), вызываемого для временной остановки приложения, например, при приеме вызова. Приложение должно прекратить отображение анимации и освободить ресурсы, которые больше ему не нужны. Работу приложения можно возобновить с помощью вызова resumeMIDlet()
- destroyApp(boolean unconditional), вызываемого при выходе из приложения. Мидлет может вызвать notifyDestroyed(), чтобы прервать работу
(Эти методы автоматически создаются при создании Визуального мидлета в NetBeans.)
Однако, нам всего лишь нужно реализовать методы startApp() путем создания экземпляра класса GameCanvas и добавления CommandListener для выхода из Midlet (мидлета). Конечно же, это не лучший способ программирования, но на этом этапе нам только лишь нужно, чтобы приложение выполнялось. В качестве текущего средства вывода изображения можно установить GameCanvas в конце или внутри GameCanvas с помощью метода setCurrent. Этот метод принимает любые объекты Displayable (отображаемые) в качестве аргумента.
public class MainMidlet extends MIDlet implements CommandListener {
private SSGameCanvas gameCanvas ;
private Command exitCommand ;
public void startApp() {
try {
//создание нового потока игры
gameCanvas = new SSGameCanvas();
gameCanvas.start(); // запуск потока игры
exitCommand = new Command("Exit",Command.EXIT,1);
gameCanvas.addCommand(exitCommand);
gameCanvas.setCommandListener(this);
Display.getDisplay(this).setCurrent(gameCanvas);
}
catch (java.io.IOException e) { e.printStackTrace();}
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void commandAction(Command command, Displayable displayable) {
if (command == exitCommand) {
destroyApp(true);
notifyDestroyed();
}
}
}