Я искал темы обнаружения столкновений, но все они касались самого обнаружения. Мой вопрос больше о до и после процесса обнаружения. Я пишу свою первую большую игру, и я хочу сделать ее настолько эффективной, насколько это возможно.Настройка обнаружения столкновений, а затем столкновение в 2D-игре
Предпосылка игры заключается в том, что вы летаете на корабле вокруг игрового поля. В этой области будут препятствия различной природы, обеспечиваемые окружающей средой, вражескими кораблями и снарядами, летящими и плавающими в космосе. Объекты смогут вращаться вокруг своих центров и, если потребуется, или хотят.
Моя идея для настройки теста состоит в том, чтобы объекты каким-то образом загружались в очередь и список. Затем игра будет принимать все, что находится на передней панели очереди, и проверять все в списке. Сначала будет проверяться, чтобы убедиться, что вещь в списке не сама (что создавало бы столкновение за все время lol). Затем игра проверит, есть ли конфликт между объектом в очереди и объектом в списке. Если есть столкновение, то он будет отмечать объекты, говорящие, что они столкнулись, и сохранить ссылку или что-то из того, с чем столкнулся объект.
Например, если А столкнулся с В, игра сказали бы, чтобы запустить функцию столкновения, B, чтобы запустить функцию столкновения, и будет хранить в A ссылки на B и B будет хранить ссылку на А.
Игра продолжит проверку коллизий для объекта в очереди до тех пор, пока он не пройдёт через список, делая каждый раз каждый раз, чтобы учесть поражение объекта или попадание нескольких объектов.
Например, если в одном и том же кадре были выбраны три шара A, B и C, а A и A должны были быть удалены как B, так и C, то A изменит свою скорость на B, а затем на C и B и C будут иметь свои скорости, измененные A.
Будет ли это разумным способом сделать это? Я не беспокоюсь о фактическом обнаружении коллизий прямо сейчас, есть много статей или учебных пособий, а также мое собственное мышление для решения этой проблемы. Я не сталкивался с чем-либо, что говорит до и после. Я не уверен, сколько вещей в очереди и списке начнет вызывать большую нагрузку и замедлить игру. Сейчас мои объекты - это всего лишь x, y-позиции, x, y скорости, в каком направлении они находятся, и еще несколько вещей.
Теперь я думаю, что я начинаю болтать о несвязанных вещах. Было бы оценено любое понимание или мудрость.
Являются ли векторы движения обновленными по мере прохождения очереди? Кажется, что B и C будут иметь свои векторы движения, модифицированные A _after_ A, изменил ли его вектор движения. –
Он сохранит старые значения и новые значения, запустит процесс обнаружения, а затем все объекты будут обновляться, если потребуется. Таким образом, в примере A будет взаимодействовать с B и A, чтобы сохранить новые скорости. Затем он будет взаимодействовать с C, который изменит и сохранит еще более новые скорости. Затем, как только игра завершает обнаружение, она запускает процесс обновления объектов, которые будут использовать их новые скорости или делать что угодно. – Azaral
Да, но не будет ли C использовать более новые скорости A, когда вы вычисляете новые скорости для C? Предполагая самый простой ответ на столкновение, я могу думать о том, что A имеет начальную скорость (0,1), а C имеет (0, -1), B также имеет (0, -1), A сталкивается с B и C в тот же кадр, сначала он модифицирован B, давая скорость A (0, -1), затем он сталкивается с C, но поскольку они имеют один и тот же вектор скорости, ни изменения (или оба они не увеличивают скорость в одном направлении). Или вы имели в виду, что новые скорости сохраняются в новом списке, а списки меняются местами после выполнения всех вычислений? –