Столкновение
В предыдущем разделе 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(); }