Иллюстрированный самоучитель по программированию мобильных телефонов

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

Перемещение объекта по экрану телефона с помощью клавиш телефона, это, пожалуй, самое главное действие в играх. Для передвижения нужно воспользоваться методом 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()
}
}
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.