所以我使用相机(View Matrix)来移动瓷砖世界。 在XNA(MONOGAME)
我使用以下代码获取原始鼠标位置:
MouseState ms = Mouse.GetState();
Vector2 mousePosition = new Vector2(ms.X, ms.Y);
现在,如果我将X除以TILE_WIDTH而将Y除以TILE_WIDTH,它会给我一个可以从我的数组中取出的图块。但是一旦我移动矩阵,它就会抵消。如何将世界偏移量添加到鼠标位置?
还有另一个问题。当我重新调整窗口大小时。鼠标会偏移更多。无论如何解决这个问题。那么它可以在全屏窗口中以鼠标可以转换为worldPosition的任何分辨率窗口工作吗?
我的渲染:
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, SamplerState.PointClamp, null, null, null, c2d.get_transformation(GraphicsDevice));
spriteBatch.End();
我的观点矩阵:
public Matrix get_transformation(GraphicsDevice graphicsDevice)
{
_transform = // Thanks to o KB o for this solution
Matrix.CreateTranslation(new Vector3(-_pos.X, -_pos.Y, 0)) *
Matrix.CreateRotationZ(Rotation) *
Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)) *
Matrix.CreateTranslation(new Vector3(graphicsDevice.Viewport.Width * 0.5f,
graphicsDevice.Viewport.Height * 0.5f, 0));
return _transform;
}
我的获取方式:
tile[(int)worldPosition.Y / TILE_SIZE, (int)worldPosition.X / TILE_SIZE].color = Color.Red;
我尝试过的事情:
Vector2 worldPosition = Vector2.Transform(mousePosition, Matrix.Invert(viewMatrix));
(https://gamedev.stackexchange.com/questions/21681/how-to-get-mouse-position-relative-to-the-map)
即使重新调整窗口大小,我如何在世界视图中显示鼠标位置移动我的camera2D,Zoom,X,Y。
答案 0 :(得分:2)
您需要将矩阵“取消应用”到鼠标位置。要做到这一点,首先必须反转矩阵:
Matrix inverseTransform = Matrix.Invert(_transform);
之后,您可以像这样转换鼠标矢量:
Vector2 mouseInWorld = Vector2.Transform(new Vector2(ms.X, ms.Y), inverseTransform);