2

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

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

4

1 回答 1

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

假设您的相机跟踪当前的世界规模。

于 2013-05-26T10:25:06.430 回答