Веб программирование

Использование Command в J2ME

 
 

Command - это очень полезная вешь. Его можно прикреплять к некоторым объектам.

Сейчас мы создадим форму и простую игру, и создадим команды для переключения между ними.

Открываем WTK, и файл Main.java в исходниках нашего проекта.

пишем туда этот код:

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Main extends MIDlet implements CommandListener{
/*implements CommandListener мы пишем для того, чтобы обрабатывать
события нажатия на наши команды в этом классе*/

public Canv ca;
public Display d;
public Form f;
public static Main midlet;
public Command FormCmd;
public Command ExitCmd;
public Command CanvCmd;
/*Создаём 3 команды:
FormCmd будет передавать экран форме
ExitCmd будет завершать работу приложения
CanvCmd будет передавать экран второму классу*/

public Main(){
midlet=this;
}

public void startApp() {
if(d == null){
FormCmd = new Command("На форму!", Command.ITEM, 1);
CanvCmd = new Command("В игру!", Command.ITEM, 1);
ExitCmd = new Command("Выход", Command.EXIT, 2);
/*Инициализируем команды*/

f = new Form("Hello!");
f.addCommand(CanvCmd);
f.addCommand(ExitCmd);
/*Прикрепляем команды к форме*/

f.setCommandListener(this);
/*Если пользователь нажмёт на команду внутри формы - обработка события будет в этом
классе в методе commandAction, этой командой мы выбираем "прослушивателя" команд*/

d = Display.getDisplay(this);
d.setCurrent(f);
}
}

public void commandAction(Command c,Displayable d2){
/*Все знают что такое события в vb6, это тоже событие, оно вызывается если
пользователь нажал команду, Command c сверху показывает какая команда нажата
Вообще там должно быть написано Displayable d, но у нас есть объект d и будет конфликт,
поэтому я переименовал в d2, это ошибкой не будет :)*/

if(c==CanvCmd){
if(ca==null){
ca = new Canv();
ca.addCommand(FormCmd);
ca.addCommand(ExitCmd);
ca.setCommandListener(this);
}
/*Если мы не напишем это условие - то когда пользователь запустит игру, вернётся на форму,
а потом опять запустит игру 2 класс будет заного инициализирован, переменные где был
игрок потеряются и пользователю прийдётся со злым лицом играть опять :)*/

d.setCurrent(ca);
}
/*Если команда - CanvCmd, то передаем дисплей телефона 2 классу*/

if(c==FormCmd){
d.setCurrent(f);
/*Так, как мы при запуске приложения уже инициализируем форму, нам не надо проверять
условие и инициализировать её ещё раз*/

}

if(c==ExitCmd){
destroyApp(true);
/*Выход*/

}
}

public void pauseApp() {
}

public void destroyApp(boolean u) {
notifyDestroyed();
}

}


Теперь сохраняем Main.java, открываем Canv.java и пишем этот код:

import javax.microedition.lcdui.*;

public class Canv extends Canvas{

public Image Player;
public int wid = getWidth();
public int hei = getHeight();
public int KeyFire = getKeyCode(FIRE);
public int KeyLeft = getKeyCode(LEFT);
public int KeyRight = getKeyCode(RIGHT);
public int KeyUp = getKeyCode(UP);
public int KeyDown = getKeyCode(DOWN);
/*Если клавиши не жмутся - то посмотрите коды клавиш вуроке 2*/

public int PlayerX = 50;
public int PlayerY = 50;
/*Переменные расположения игрока на поле*/

public Canv(){
try{
Player = Image.createImage("/Player.png");
/*Ссылку на скачивание Player.png я дам ниже или сами нарисуйте*/
} catch (Exception e) {}
}

public void paint(Graphics g){
g.setColor(255,100,0);
g.fillRect(0,0,wid,hei);
g.drawImage(Player,PlayerX,PlayerY,20);
/*Рисуем игрока на его координатах*/
}

protected void keyPressed(int KeyCode){
if(KeyCode==KeyFire){
Main.midlet.destroyApp(true);
}

/*Передвижение игрока по полю*/
if(KeyCode==KeyLeft){
if(PlayerX>0){
PlayerX-=5;
/*В java можно делать так:
1) a--; значение переменной a уменьшится на 1
2) a-=5; значение переменной a уменьшится на 5
3) a=a-10; значение переменной a уменьшится на 10 (эту строчку лучше писать 2 способом)*/

}
}

if(KeyCode==KeyRight){
if(PlayerX<wid){
PlayerX+=5;
}
}

if(
KeyCode==KeyUp){
if(PlayerY>0){
PlayerY-=5;
}
}

if(KeyCode==KeyDown){
if(PlayerY<hei){
PlayerY+=5;
}
}

repaint();
/*После этой команды метод paint вызывается ещё раз и экран перерисовывается*/

}

}

Всё, это весь код!

А, да чуть не забыл, вот картинка Player.png (хотя можете сами нарисовать):

Скачать файл [1533 кб]

Дальше как обычно жмём Build, создаём jar и jad, и жмём Run, вот что у нас получилось:

Вот папка с проектом:

Скачать файл [11016 кб]

С каждым уроком наше приложение всё больше и больше набирает вес)

Всё!


Есть вопросы? Спроси на нашем форуме!!
Mishin870390 [31.03.2013 00:37]

Админ, добавь в "Java", тута две мои статьи)

Mishin870390 [31.03.2013 23:20]

завтра может быть пропадёт интернет, не знаю когда снова прийду на сайт, буду пока писать статьи в word'е, потом выложу

Shaggy20 [10.10.2013 20:38]

Автор - красавец! Даже такой рак, как я, знающий только HTML, смог во всём разобраться! Теперь буду заучивать "формулы" :3 Спасибо за урок)

Mishin870390 [14.10.2013 21:41]

:3 правда я сам бросил яву, как основной язык. проект по важнее у меня на флеше.

Mishin870390 [14.10.2013 21:44]

Shaggy, кстати я сам только несколько месяцев до написания статьи был ламером в яве, потом выучил её, а на основе своих ошибок, полученного опыта (например что сам не могу понять что и как делается) решил создать учебник, где пишу для "себя из прошлого". написал как смог понятно)



Оставлять комментарии можно только зарегистрированным




Предупреждение: Вся информация представлена исключительно в образовательных целях.
Ни авторы, ни администрация не несут ответственности в случае ее использования в противозаконных целях.