我需要将鼠标光标绘制在正确的世界位置,所以我使用了这段代码:
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)。
答案 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);
假设您的相机记录当前的世界范围。