XNA:根据变换矩阵避免鼠标光标纹理缩放

时间:2013-05-25 18:16:42

标签: c# xna

我需要将鼠标光标绘制在正确的世界位置,所以我使用了这段代码:

Matrix inverseViewMatrix = Matrix.Invert(camera.GetViewMatrix(graphics.GraphicsDevice));
mousePos.X -= cursorTex.Width / 2;
mousePos.Y -= cursorTex.Height / 2;
Vector2 worldMousePosition = Vector2.Transform(mousePos, inverseViewMatrix);
spriteBatch.Draw(cursorTex, worldMousePosition, Color.White);

这实际上有效,但是当我缩小相机时,我将鼠标光标缩放。

有没有办法避免这种情况?我希望在缩小时保持原始光标纹理尺寸(32 x 32)。

1 个答案:

答案 0 :(得分:2)

我能想到的最简单的方法是将鼠标光标绘制在一个单独的spritebatch中,删除比例。

SpriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, camera.GetViewMatrix(graphics.GraphicsDevice));
//Regular Draw Code
SpriteBatch.End();

SpriteBatch.Begin();
//Mouse Cursor Draw Code
SpriteBatch.End();

修改

另一种选择是根据当前的相机缩放级别手动缩放纹理。您基本上只需根据缩放级别调整光标纹理的比例。

在与所有其他内容相同的抽奖调用中,您可以这样做:

float scale = 1 / camera.Scale;    //untested
Helper.SpriteBatch.Draw(cursorTex, worldMousePosition, null, Color.White, 0, Vector2.Zero, scale, SpriteEffects.None, 1);

假设您的相机记录当前的世界范围。