3D API, такие как DirectX и OpenGL, имеют концепцию под названием «Пространство модели» и «Мировое пространство»;где Пространство модели - это набор координат, выраженный по отношению к одной модели, независимо от того, где она находится в мире, а Пространство мира - это набор координат, которые относятся ко всему самому миру.Чтобы взять координату из модельного пространства, где координаты имеют значение только для отдельной модели, и преобразовать ее в мировое пространство, где координаты имеют значение для всего игрового мира, вы умножаете координаты через матрицу, называемую матрицей мира,который уникален для каждого экземпляра модели в мире.
Так что в основном:
{X, Y координаты в пространстве модели} * {World Matrix экземпляра модели} = {X, Y координатыв мировом пространстве}
Вы должны применить этот же подход к вашей 2D-игре.Конец ствола на вашем спрайте танка всегда совпадает с координатой X, Y изображения вашего танка.Но изображение вашего танка претерпевает некоторые преобразования, когда оно отображается на экране (вращение вокруг точки).Вам просто нужно взять координаты X, Y конца ствола на изображении резервуара и применить к нему то же самое преобразование, и это даст вам координаты X, Y того места, где конецствола в данный момент находится на экране.
Затем оттуда возьмите угол поворота танка, чтобы определить, какой угол должен пройти снаряд после его выстрела.