我想在它们的位置而不是任何其他点旋转我的 2D Sprite ,但我在使用该功能时遇到了问题。
我看到人们以这种方式使用 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);
但是这样做我的 Sprite 会围绕某个奇怪的点在一个 laaaaarge 圆圈中旋转。
我试了又试,想出了这个解决方案,但感觉它在我进一步操纵实体坐标和东西时有一些副作用。
D3DXVECTOR2 pos(sprite.x + (sprite.width / 2), sprite.y + (sprite.height / 2))
D3DXMatrixTransformation2D(
&mat,
NULL,
NULL,
NULL,
&pos,
sprite.rotation,
NULL);
有什么我想念的吗?
最佳答案
如果您的图像文件的尺寸大于您尝试旋转的图像部分,可能会让您挠头一阵子。 我的意思是,如果你的图像文件是 512x512,左下角有一只小猫,只有 64x64,其余部分的 alpha 为 0,它将占据图像文件的中心,不是猫的。
如果这就是您遇到的情况,您可以将猫或任何图像移动到图像文件的中心,或者在 DirectX 中进一步查看,您可以在其中定义一个矩形并使用它作为图像文件的剪切来绑定(bind)您的图像(猫)。
关于c++ - D3DXMatrixTransformation2D 行为怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992285/