Программирование двухмерных игр на 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();
        }
    }
}