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

本文关键字:变换 缩放 纹理 鼠标 光标 XNA | 更新日期: 2023-09-27 18:15:14

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

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

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

我能想到的最简单的方法是在一个单独的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();

编辑

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

在相同的draw调用中,你可以这样做:

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

假设你的相机跟踪当前的世界尺度