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