Случайно падающие предметы и метод обнаружения столкновений

1

Я программирую игру, где вы можете поймать объекты, падающие с верхней части экрана (растровые изображения). Эти растровые изображения будут иметь один и тот же файл изображения. Тем не менее, я хочу, чтобы случайное количество их падало бесконечно (пока игра не закончилась). Теперь моя проблема заключается в разработке алгоритма для обнаружения захвата этих произвольно созданных растровых изображений. Я могу зарегистрировать уловку, когда у меня выпало только одно изображение, но я не знаю, как я смогу реализовать несколько изображений и смогу реализовать обнаружение столкновений. До сих пор я придумал две идеи. Один из них - иметь очередь, и каждый падающий объект попадает в очередь, когда он создается. Программа будет обнаруживать, только если ящик поймал объект в первой позиции очереди. Если он (а) пойман или (достигает определенной точки на экране, этот объект будет удален. Другая идея, которую у меня возникла, - это больше вопрос - могу ли я создать класс для этого падающего объекта и метод внутри него, который обрабатывает столкновения? Тот, который всегда слушает столкновение всякий раз, когда создается новый экземпляр этого класса?

Сообщите мне свои мысли и предложения!

Теги:
random

1 ответ

2
Лучший ответ

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

Затем начните с самого низкого объекта и проверьте, пока не получите слишком высокие объекты для возможного столкновения (если поле может меняться по высоте, это может также измениться).

Пример:

|           6  |
|   5          |
|  3      4    |
|              |
+----2---------+  <-- if you reach an object at this height stop
| 1            |
|   |__|       |
+--------------+  

Предположим, у вас есть 6 падающих предметов. Если они отсортированы, теперь вы можете перебирать список и проверять возможные столкновения. Если вы достигнете порога высоты (где объект 2 есть), вы можете остановиться, так как они еще не могут столкнуться (нет необходимости проверять объекты 3-6).

Обратите внимание, что существуют и другие более сложные, но более быстрые подходы, но это должно помочь вам начать.

Edit:

Это своего рода алгоритм развертки и обрезки, если вы захотите его google.

Другим подходом могло бы быть вычисление ETA (расчетное время прибытия), то есть для каждого нового объекта рассчитывать время, когда оно должно пересекать пороговую линию. Затем сортируйте к тому времени и проверьте все, чья разность во времени равна &lt = 0 (они пересекли линию порога). Это будет хорошо работать для объектов разного размера и скорости, а ловушка находится на фиксированной высоте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню