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

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

//метод run интерфейса Runnable public void run()
{
// бесконечный цикл
while (true)
{
// сравниваем позицию if(position > endX)
{
//уменьшаем позицию position = endX;
}
// увеличиваем позицию на 1 position ++;
// обновляем экран repaint();
// останавливаем цикл на 20 миллисекунд
try { Thread.sleep(20); }
catch (java.lang.InterruptedException zxz) {}
}
}
publie void paint(Graphics g)
{
// вычисляем область для перерисовки экрана
int х = g.getClipWidth();
int у = g.getClipHeight ();
// устанавливаем желтый цвет фона
g.setColor(0xffff00);
// назначаем перерисовку всему экрану
g.fillRect(0.0,x,y);
// устанавливается синий цвет квадрата
g.setColor(0, 0, 200);
// рисуем квадрат
g.fillRect(position, 40, 20, 20);
// устанавливается красный цвет круга
g.setColor(250, 0.0);
// рисуем круг
fillArc(position, 10, 20, 20, 45, 360);
}
}

В файле Main.java создается объект класса Draw, запускается системный поток и отражается текущий экран. Файл Draw.java содержит полную реализацию класса Draw. Начальные позиции квадрата и круга определяются переменной position, которой задано нулевое значение. Для того чтобы определить момент столкновения, необходимо знать точку или координаты препятствия. В этом примере как препятствие применяется конец экрана с правой стороны, поэтому с помощью метода getWidth () находится конец экрана.

int endX = getWidth();

В последствии значение переменной endx будет использовано для определения столкновения.

Конструктор, класса Draw обращается к конструктору своего суперкласса Canvas. В методе run() и цикле while с помощью оператора отношения if происходит сравнение текущей позиции двух объектов и конца экрана.

if (position > endX)
{
position = endX – ;
}

После того как позиция обоих объектов становится больше значения переменной endx, то есть квадрат и круг достигают конца экрана, то происходит уменьшение переменной position. Это приводит к движению объектов в обратном направлении.

После компиляции примера на экране появятся два движущихся слева направо объекта. Мы использовали препятствие в виде одной стороны экрана, но точно таким же образом можно определить столкновение для всех сторон экрана или просто для статических объектов. Выполните эти упражнения в качестве домашнего задания, а также внимательно посмотрите на процесс работы примера из листинга 7.7, квадрат и круг все-таки не отталкиваются от кромки экрана, а исчезают.

Это происходит, потому что опорная позиция объектов находится в левом верхнем углу и столкновение происходит именно с позицией объектов* Вы знаете размер круга и квадрата, подумайте как можно определить более точную точку столкновения объектов и кромки экрана.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.