Я хочу повернуть 2D-спрайты в их положении, а не в любой другой точке, но у меня возникли проблемы с функцией.
Я видел людей, использующих D3DXMatrixTransformation2D таким образом (исключая масштабирование):
D3DXMATRIX mat;
D3DXVECTOR2 center(sprite.width / 2, sprite.height / 2);
D3DXVECTOR2 pos(sprite.x, sprite.y)
D3DXMatrixTransformation2D(
&mat,
NULL,
NULL,
NULL,
¢er,
sprite.rotation,
&pos);
Но, делая это, мои спрайты вращаются кругом вокруг какой-то странной точки.
Я пытался и пытался придумать это решение, но кажется, что у него есть некоторые побочные эффекты, в то время как я продолжаю манипулировать координатами сущностей и прочим.
D3DXVECTOR2 pos(sprite.x + (sprite.width / 2), sprite.y + (sprite.height / 2))
D3DXMatrixTransformation2D(
&mat,
NULL,
NULL,
NULL,
&pos,
sprite.rotation,
NULL);
Что-то я пропускаю?
Одна небольшая уловка, которая может оставить вас на некоторое время поцарапать голову, это если ваш файл изображения имеет размеры больше, чем та часть изображения, которую вы пытаетесь повернуть.
Я имею в виду, что если ваш файл изображения имеет размер примерно 512×512, и в левом нижнем углу у вас есть маленькая кошка размером всего 64×64, а остальная часть находится в 0 альфа, она займет центр файла изображения, не из кота.
Если это то, что происходит с вами, вы можете либо переместить кота, или какое-либо другое изображение, в центр файла изображения, или взглянуть немного дальше в DirectX, где вы можете определить прямоугольник и использовать его как вырез. из файла изображения, чтобы связать ваше изображение (кошка).
Других решений пока нет …