双DirectX矩阵转换?

时间:2011-05-15 22:07:37

标签: directx direct3d

我正在制作2D游戏。视图来自我的角色正上方,他在屏幕中间静止,世界在他周围移动(和旋转)。我这样做是通过调用D3DXMatrixTransformation2D并放入我角色的(常量)位置和他的旋转。

这对我的角色和背景非常有效。对于子弹和敌人,即使它有效,它也不是我想要的。我希望敌人在他们自己的轴上与我的角色的整体轴一起旋转。目前,当我旋转180度时,敌人会以与背景相同的方式颠倒。没关系,但是我希望他有能力转身射击我(或者旋转相同的程度以便我们总是面朝上;我还没有决定,但我相信这是同样的问题)。

子弹是同一个故事。我的第一个子弹设计是一个长的瘦能量型梁。无论我向哪个方向射击它,它总是会面向“北”,即使它朝着不同的(正确的)方向前进。我现在通过创建一个圆形子弹来回避这个问题,但它并没有解决真正的问题。

那么有没有两次调用D3DXMatrixTransformation2D?我试过用一个矩阵和一个SetTransform()调用,两个matricies和两个SetTransform()调用,以及一个矩阵和两个SetTransform()调用,但它要么不改变任何东西,要么它使子弹/ enemy纹理旋转中心并且不识别我的旋转。如果需要,我可以提供一些代码,但是给我这个问题的代码没有什么。谢谢!

编辑:这是我现在的代码,但它似乎与以前一样:

    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);

“position”变量是D3DXVECTOR3变量,它是当前项目符号对象的屏幕位置。 “this->旋转”是子弹的旋转。 spriteCenter变量是播放器纹理中心的位置,即(408,316,0)。

0 个答案:

没有答案