Программирование мобильных телефонов на Java

         

Перемещение объекта с помощью клавиш



Перемещение объекта по экрану телефона с помощью клавиш телефона, это, пожалуй, самое главное действие в играх. Для передвижения нужно воспользоваться методом key Pressed () и описать код производящий обработку событий получаемых с клавиш телефона. При реализации метода keyPressed (), сначала необходимо вызвать метод getGameAction () для получения ключевого код»! с последующей его обработкой. Для обработки полученного ключевого кода можно применить оператор switch и тогда метод keyPressed () может принять следующий вид:

protected void keyPressed(int keyCode)
{
// получаем игровые события
int act = getGameAction{keyCode);
// обработка событий

switch(act)
{
case Canvas.LEFT:
// движение влево break; case Canvas .RIGHT:
// движение вправо break;
case Canvas.UP:
 // движение вверх
break;
case Canvas.DOWN:
// движение вниз break; default: break;
}
}
}


Код обработки для клавиш зависит от того, что именно вы желаете сделать с объектом. Давайте возьмем за основу код из листинга 7.5, где был нарисован квадрат, и модернизируем его. Выведем синий квадрат на экран, для этого создадим две переменные positionX и positionY, отвечающие за точку вывода квадрата на экран и присвоим им значения близкие к центру экрана.

int positionX. = getWidth()/2;
 int positionY = getHeight()/2;


При нажатии клавиш можно воспользоваться значениями переменных positionX и positionY для перемещения квадрата по экрану, увеличивая или уменьшая значения этих двух переменных. Значение, на которое вы будете увеличивать или уменьшать переменные, фактически будет обозначать скорость перемещения квадрата по экрану. В листинге 7.8 дается полный код программы перемещения элемента по экрану с помощью клавиш.

/** Листинг 7.8
Класс Main и класс Draw
*/
import javax.microedition.Icdui.*;
import javax.microedition.midlet.*;
public class Main
extends MIDlet implements CommandListener .
{
// команда выхода из программы
private Command
exitMidlet = new Command(«Выход», Command.EXIT, 0);
public void startApp()
 {
// создаем объект класса Draw
Draw dr = new Draw();
// запускаем поток
dr.start();
// добавляем команду выхода
dr.addCommand(exitMidlet);
dr.setCommandListener(this);
Display.getDisplay(this).setCurrent(dr);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional){}
public void сommandAction(Command c, Displayable d)
{
if (c = = exitMidlet)
{
destroyApp(false); notifyDestroyed()
}
 }
 }
/**
класс Draw определен в файле Draw.Java
передвижение квадрата с помощью клавиш телефона
*/
import javax.microedition.Icdui.*;
public class Draw extends Canvas implements Runnable
{
// устанавливаем квадрат в центр экрана
int positionX = getwidth()/2;
// устанавливаем квадрат в центр экрана
int positionY = getHeight()/2;
// конструктор
public Draw()
{ super(); }
public void start()
{
// создаем и запускаем поток
Thread t = new Thread(this);
t.start();
}
// метод run интерфейса Runnable public void run()
{
// бесконечный цикл
while (true)
{
// обновляем экран
repaint();
// останавливаем цикл на 20 миллисекунд
try { Thread, sleep (20) ,- }
catch (Java.lang.InterruptedException zxz) {}
}
 }
public void paint(Graphics g)
{
// вычисляем область для перерисовки экрана
int x = g.getClipWidth();
int у = g.getClipHeight();
// устанавливаем белый цвет фона
g.setColor(0xffffff);
// назначаем перерисовку всему экрану
g.fillRect(0,0,х,у);
// устанавливается зеленный цвет квадрату
g.setColor(0, 0, 200);
7/ рисуем квадрат
g.fillRect(positionX, positionY, 20, 20);
projected void keyPressed(int keyCode)
// скорость передвижения
int speed = 3 ;
// получаем игровые события
int act = getGameAction(keyCode);
// обработка событий
switch(act)
{
// движение влево case Canvas.LEFT:
positionX -= speed;
 break;
// движение вправо case Canvas.RIGHT:
positionX += speed;
break;
// движение вверх case Canvas.UP:
positionY -= speed;
break;
// движение вниз case Canvas.DOWN:
positionY += speed;
break; default: break;
}
}
}


В следующей главе рассматриваются игровые классы, доступные в профиле MIDP 2.0 и значительно упрощающие создание игрового цикла, а также игровом  графики.

Содержание раздела