{{notification.text}}

MirGames

Сейчас подавляющее большинство сотовых телефонов поддерживают технологию Java, а вернее адаптированую для мобильников ее версию Java2MicroEdition. Так как код написанный на яве выполняется виртуальной машиной, то производителю остается лишь сделать свой телефон совместимым со спецификацией J2ME и в руках потенциального покупателя оказывается огромное колличество игр и программ.

Всего существует две версии Java2ME: Midlet 1.0 и Midlet 2.0. Надо сказать, что Midlet 1.0 — не предназначен для создания на нем игр и, чтобы сделать нормальную игру, придется перевернуться через голову или ориентироваться на конкретного вендора, использовать его SDK в которой могут быть добавлены все необходимые классы. Да и мобилки с мидлет 1.0 как правило имеют экран низкого разрешения, так что я считаю учиться писать надо сразу на Midlet 2.0 и ориентироваться на современные телефоны с минимальным разрешением 176Х220.

Теперь давайте подумаем зачем вообще учиться писать игры для сотовых. Ну, во-первых ради интереса, например можно сделать подарок любимой девушке, а во-вторых рынок мобильных игр сейчас быстро развивается, в нем уже крутятся деньги порой большие, чем в аналогичном PC Shareware рынке.

Игры для телефонов делать куда проще и быстрее, чем для компьютера, а раз доход с этого примерно одинаковый, то выходит это — золотая жила. Остается только договориться с издателем, который будет сплавлять ваше творчество за бугор, в нашей стране увы заработать этим ремеслом пока нельзя.

Ну вот, собственно, для введения хватит, скажу еще лишь, что статья расчитана на не новичков в геймдеве, ни разу не писавших под J2ME.
Моя игра, на моем же телефоне

Переходим к делу!
Перво наперво, что придется сделать это — выкачать много мегабайт из интернету иначе увы никак. Зато весь инструментарий — фриварный!

Качаем:

java.sun.com/javase/downloads/index.jsp
Отсюда берём JDK 6, в него входит виртуальная машина Java и базовые тулзы разработчика, так же он позволяет писать на яве под форточки, но имхо C# тут в разы лучше.

java.sun.com/javame/downloads/index.jsp
Отсюда же берём Sun Java Wireless Toolkit 2.5 for CLDC, тулзы которые нужны для разработки под мобильники.

www.netbeans.info/downloads/index.php
Открытое IDE NetBeans IDE 5.5 — написано на яве и для явы.

www.netbeans.org/products/mobility/
Дополнение для NetBeans, которое дружит его с Wireless Toolkit'ом, зовется — NetBeans Mobility Pack.

Надеюсь, вас не остановил тот объем трафика, который пришлось выкачать. Устанавливать, кстати, все нужно в том же порядке в каком расположены ссылки выше. Ну вот, теперь мы все поставили и можно пробовать что-либо пописать.

Создаем на диске «С» папку и запускаем NetBeans. Выбираем «File» -> «NewProject», в окне — в группе «Mobile», выбираем «MobileApplication» и жмем «Next». В следующем окне убираем галочку «Create Hello Midlet», далее жмем «Finish». По дефолту создалось Midlet 2.0 пустое приложение.

Собственно, что бы все заработало нужно создать класс понаследованный от класса MIDlet, для этого — щелкаем правой кнопкой в левом окне «Projects» выбираем «New» -> «New File/Folder», в окне из каталога «MIDP» выбираем «MIDLet».

Теперь нужно создать класс наследованный от «GameCanvas» и являющийся по совместительству основным игровым потоком. Так же щелкаем правой кнопкой по окну проектов «New» -> «Java class ...»(Называем класс «Engine») и меняем весь код этого модуля на следующий:

import java.io.IOException;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Engine extends GameCanvas implements Runnable
{
         private Image bg;
         private boolean looping = true, paused = false;
         public int RenderSpeed = 33;

         public Engine()
         {
                 super(true);
                 try
                 {
                         bg = Image.createImage("/background.png");
                 }
                 catch (IOException ex)
                 {
                         ex.printStackTrace();
                 }
         }

         public void Pause()
         {
                 paused = !paused; 
         }

         public void Quit()
         {
                 looping = false; 
         }

         public void Init()
         {
                 Thread t = new Thread(this);
                 t.start();
         }

         public void Process()
         {
                 int KeyStates = getKeyStates();

                 boolean IS_LEFT = ((KeyStates & LEFT_PRESSED) != 0);
                 boolean IS_RIGHT = ((KeyStates & RIGHT_PRESSED) != 0);
                 boolean IS_UP = ((KeyStates & UP_PRESSED) != 0);
                 boolean IS_DOWN = ((KeyStates & DOWN_PRESSED) != 0);
                 boolean IS_FIRE = ((KeyStates & FIRE_PRESSED) != 0);
         }

         public void Draw(Graphics g)
         {
                 int scr_w = g.getClipWidth();
                 int scr_h = g.getClipHeight();

                 g.drawImage(bg, 0, 0, g.TOP | g.LEFT);
         }

         public void run()
         {
                 Graphics g = getGraphics();

                 this.setFullScreenMode(true);

                 while (looping)
                 {
                         if (!paused)
                         {
                                 Process(); 
                                 Draw(g);

                                 flushGraphics();

                                 try
                                 {
                                         Thread.sleep(RenderSpeed);
                                 }
                                 catch (InterruptedException ex)
                                 {
                                         ex.printStackTrace();
                                 } 
                         }
                 }
                 bg = null;
         }
}

Не пугайтесь, код я прокомментирую ниже.

Теперь создаем в папке проекта папку «res» и кладем в нее любую картинку, обозвав ее прежде «background.png».

Теперь щелкаем правой кнопкой в окне «Project» по названию нашего проекта (там еще рядом такая синяя иконка телефона ) и выбираем пункт «Properties», идем на закладку «Libraries&Resources» жмем кнопку «Add Folder» и указываем папку в которую мы положили нашу картинку.

Теперь открываем главный класс нашего приложения и кое-что допишем, после чего он должен иметь следующий вид:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Midlet extends MIDlet
{
         public Engine gEngine;

         public void startApp()
         {
                 gEngine = new Engine();
                 Display.getDisplay(this).setCurrent(gEngine);
                 gEngine.Init();
         }

         public void pauseApp()
         {
                 gEngine.Pause();
         }

         public void destroyApp(boolean unconditional)
         {
                 if (gEngine!=null) 
                 {
                         gEngine.Quit();
                         gEngine = null;
                 }

                 System.gc();
         }
}

Теперь смело жмем F6 и смотрим что получилось, а получилось все хорошо, мы написали минимальное игровое приложение на яве, дальше этот код можно смело расширять и превращать в настоящую игру. Теперь я прокомментирую отдельные куски кода. Вернее отдельные методы написанных классов.

Начнем с главного класса приложения:
  • public void startApp() — этот метод вызывается сразу после старта нашего мидлета, в нем мы создаем и инициализируем наш игровой движок.
  • public void pauseApp() — этот метод вызывается когда пользователь сворачивает ява приложение, тут мы ставим движок на паузу, дабы не загружать по напрасну слабый процессор мобильника.
  • public void destroyApp(boolean unconditional) — метод вызывается при завершение приложения, убиваем движок и очищаем ресурсы, я еще вызываю на всякий случай сборщик мусора.

Заключение
Что бы разобраться с языком Java и лучше понять, как разрабатывать на нем приложения и игры советую купить или скачать книгу «Горнаков С.Г. Программирование мобильных телефонов на Java 2 Micro Edition».

Файлы к статье
Asteroids Mobile — пример игры на J2ME
23.01.07 00:23

Комментарии

01.10.12 00:32

От себя добавлю, что с момента написания этой статьи много времени прошло, в IDE Netbeans дополнение для написания j2me программ там идет как стандартное и не нужно ничего докачивать. Также надо заметить что компания SUN была поглащена (но видимо не переварена еще =)) компанией ORACLE. Поэтому инструменты нужно теперь на их сайте.<!--test-->

({{comment.CreationDate | date:'dd.MM.yy HH:mm'}})
Отредактировано: {{comment.UpdatedDate | date:'dd.MM.yy HH:mm'}}