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