Как решить проблему нахождения касания объектов?

Программа должна быстро перемещать объект (шарик) и когда найдено касание объекта с другим шариком нужно первый шарик остановить. Я создаю класс SurfaceView. В параллельном потоке создаю цикл while в каждой итерации которого:

  1. изменяю координату шарика

  2. проверяю пересечение его с другим шариком.

  3. если пересечение обнаружено, то останавливаю шарик.

И это всё хорошо работает пока скорость шарика небольшая (т.е. шарик перемещается за один цикл на 1-2 пикселя).

Скорость обновления экрана у меня на устройстве примерно 40-60 циклов в секунду. Ширина экрана 1280 пикселей. Я хочу, чтобы шарик пролетал весь экран примерно за 0.5 сек. Это значит, что за один цикл он должен перемещаться примерно на 40-60 пикселей. В результате если шарик находит пересечение и останавливается, то он останавливается не при касании другого шарика, а уже когда пересёкся с ним на 40-60 пикселей! Т.е. я не могу получить требуемый результат. Шарик не просто касается другого шарика, а пересекается с ним на 60 пикселей! Мне это не подходит.

Я читал, что при использовании OpenGL обновление экрана происходит быстрее (но насколько быстрее я не знаю) Если бы обновление экрана происходило НАМНОГО быстрее, то я смог бы перемещать объект за одну итерацию на 1-2 пикселя и перекрытие шариков было бы не заметно.
Подскажите, как мне решить проблему ПЕРЕКРЫТИЯ сталкивающихся шариков:

  1. воспользоваться скоростью OpenGL, если это даст желаемый результат (во сколько раз OpenGL быстрее рисует экран?) или

  2. всё же использовать класс SurfaceView, но каким-то образом исправлять ошибку НАЛОЖЕНИЯ объектов?


Ответы (0 шт):