双DirectX矩阵变换?

双DirectX矩阵变换?,directx,direct3d,Directx,Direct3d,我正在创建一个2D游戏。这个视角是直接从我的角色之上,他在屏幕中央静止,世界在他周围移动和旋转。我通过调用D3DXMatrixTransformation2D来实现这一点,并将角色的恒定位置和旋转置于其中 这对我的角色和背景都很合适。对于子弹和敌人,即使它有效,但这不是我想要的。我希望敌人沿着自己的轴和我角色的整体轴旋转。目前,当我旋转180度时,敌人是颠倒的,就像背景一样。那没关系,但我希望他能够转身射中我,或者以同样的角度旋转,这样我们就永远面朝上;我还没有决定,但我相信这是同样的问题 子弹

我正在创建一个2D游戏。这个视角是直接从我的角色之上,他在屏幕中央静止,世界在他周围移动和旋转。我通过调用D3DXMatrixTransformation2D来实现这一点,并将角色的恒定位置和旋转置于其中

这对我的角色和背景都很合适。对于子弹和敌人,即使它有效,但这不是我想要的。我希望敌人沿着自己的轴和我角色的整体轴旋转。目前,当我旋转180度时,敌人是颠倒的,就像背景一样。那没关系,但我希望他能够转身射中我,或者以同样的角度旋转,这样我们就永远面朝上;我还没有决定,但我相信这是同样的问题

子弹是同一个故事。我的第一个子弹设计是一个细长的能量型光束。不管我朝哪个方向开枪,它都会朝北,即使它朝着不同的正确方向。我通过制造一个圆形子弹暂时避开了这个问题,但它并没有解决真正的问题

那么,是否需要调用D3DXMatrixTransformation2D两次?我试过用一个矩阵和一个SetTransform调用,两个矩阵和两个SetTransform调用,以及一个矩阵和两个SetTransform调用来实现,但它要么没有改变任何东西,要么使子弹/敌人纹理成为旋转中心,无法识别我的旋转。如果需要的话,我可以提供一些代码,但是代码中没有什么会给我带来这个问题。谢谢大家!

编辑:下面是我现在的代码,但它的工作方式似乎与以前相同:

    D3DXVECTOR2* center =  new D3DXVECTOR2(position.x,position.y);

D3DXMatrixTransformation2D(&mat,NULL,0.0,NULL, center, this->rotation,NULL);
sprite->SetTransform(&this->mat);
D3DXMatrixTransformation2D(&this->mat, NULL, NULL, NULL, &this->spriteCenter, *player::getInstance()->getRotation(), NULL);

sprite->SetTransform(&this->mat);

sprite->Draw(bullet, NULL, NULL, &this->position, 0xFFFFFFFF);

位置变量是一个D3DXVECTOR3变量,它是当前项目符号对象的屏幕位置。此->旋转是项目符号的旋转。spriteCenter变量是播放器纹理中心的位置,即408316,0。

您可能希望看到类似的情况,因为您可以将每个部分视为一个单独的sprite,因此为每个对象进行转换,执行所需操作,然后进行回译,并让DirectX进行绘图。呵呵……这就是我一直使用的站点。我从没想过把每一种纹理都做成一个精灵。这会降低性能吗?我不知道你所说的翻译回来是什么意思。我知道我在每次纹理迭代中都会重复使用矩阵和精灵,因此每个敌人/子弹的矩阵都会发生变化。我只想对每个敌人/子弹使用两次转换,但它似乎不起作用。@Megawolf-我倾向于将对象转换为0,0,0,这样我可以更容易地确定数学,然后将其转换回正确的坐标。为什么要使用相同的矩阵两次?如果每个对象都因更改而调整,您可能会得到错误的行为。如何转换为0,0,0?D3DXMatrixTransformation2D函数似乎与精灵/纹理在屏幕上的位置无关。这里有一个指向旋转轴所在位置的指针,也就是说,还有一个指向缩放轴的点,但对我来说这是空的。我在上面留下了一些代码。我一定是错过了什么,因为没有什么是我认为应该的。看看这个