Обработка столкновений в единой сетке - PullRequest
0 голосов
/ 30 января 2020

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

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

Проблема возникает, когда я пытаюсь реализовать эти данные структура с использованием связанного списка. Для единого массива сетки, который содержит связанные списки объектов, каждый объект содержит пару указателей на предыдущий и следующий объекты, которые находятся в одной и той же ячейке. Это означает, что если у меня есть Объект A, B, C в ячейке 1, я не могу сделать так, чтобы Объект B находился в нескольких ячейках, если бы он перекрывался, потому что Объект B уже указывает на объект A и C в ячейке. 1, и он больше не может указывать на какой-либо другой объект в ячейке 2.

Простым решением будет просто использовать вектор или массив, но есть ли лучшие решения?

1 Ответ

0 голосов
/ 30 января 2020

Используйте обертку элемента, что-то вроде этого:

class Wrapper {
public:
  Object *obj;
  Wrapper *next, *prev;
}

и затем сохраните Wrapper в сетке вместо Object.

...