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

Столкновение

В предыдущем разделе 7.9 мы выведи на экран синий квадрат, задали ему вектор движения и перемещали квадрат горизонтально через весь экран. После того как квадрат исчезал, достигнув конца экрана, он циклично появлялся вновь с другой стороны. Следующий пример иллюстрирует столкновение круга и квадрата с препятствием, а именно, окончанием экрана телефона. Оба объекта рисуются независимо друг от друга по высоте экрана и перемещаются параллельно по горизонтали слева на право.

По достижению конца экрана оба объекта отталкиваются от конца экрана и начинают движение в обратном направлении. Посмотрите на листинг 7.7, где приводится код программы осуществляющий эти действия. Эта программа состоит из двух файлов Main.java и Draw.java.

Листинг 7.7. Класс 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);
publicvoid 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 position = 0;
// узнаем ширину экрана
int endX = getWidth();
// конструктор
public Draw()
{ super();
}
public void start()
{
// создаем и запускаем поток
Thread t = new Thread(this);
t.start();
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.