Я пишу небольшую аркадную игру на C++ (многонаправленный двухмерный космический шутер) и заканчиваю часть обнаружения столкновений.
Вот как я это организовал (я только что придумал, так что это может быть дерьмовая система):
Каждый корабль состоит из круговых компонентов — количество компонентов в каждом корабле произвольно (больше компонентов, больше процессорных циклов). У меня есть расстояние maxComponent, которое я рассчитываю при создании корабля, которое в основном представляет собой самую длинную линию, которую я могу провести от центра корабля до края самого дальнего компонента. Я слежу за вещами на экране и использую maxComponentDistance, чтобы увидеть, достаточно ли они близки, чтобы столкнуться.
Если они находятся в непосредственной близости, я начинаю проверять, не пересекаются ли компоненты разных кораблей. Вот где возникает мой вопрос об эффективности.
У меня есть координаты (x,y) компонента относительно центра корабля, но они не учитывают то, как сейчас вращается корабль. Я держу их относительными, потому что не хочу пересчитывать компоненты каждый раз, когда корабль движется. Итак, у меня есть небольшая формула для расчета вращения, и я возвращаю 2d-вектор, соответствующий положению с учетом вращения относительно центра корабля.
Обнаружение столкновений находится в GameEngine и использует 2d-вектор. Мой вопрос о типах возврата. Должен ли я просто создавать и возвращать объект 2d-вектора каждый раз, когда эта функция вызывается, или я должен дать этому объекту-компоненту дополнительную частную переменную 2d-вектора, отредактировать частную переменную при вызове функции и вернуть указатель на этот объект?
Я не уверен в эффективности выделения памяти по сравнению с постоянной редактируемой частной переменной. Я знаю, что под приватную переменную тоже пришлось бы выделять память, но не каждый раз, когда она проверялась на коллизии, а только при создании нового компонента. Компоненты не являются постоянными в моем окружении, так как они удаляются при уничтожении корабля.
Это моя главная дилемма. Я также был бы признателен за любые указатели с дизайном моей реальной системы обнаружения столкновений. Это мой первый раз, когда я взламываю его (может быть, стоило немного прочитать)
Заранее спасибо.