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)。
我能想到的最简单的方法是在一个单独的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);
假设你的相机跟踪当前的世界尺度