1

我正在开发适用于 Windows 的自上而下的战略/RPG/塔防 XNA 游戏,但在扩展时遇到了问题。

我的显示模式是 1680 X 1050,这就是我设置 PreferredBackBuffer 的宽度和高度。

我发现当我使用我的相机对象放大和缩小时(更改传递给 SpriteBatch.Begin 方法的矩阵上的比例,它会改变我的精灵的比例......但我仍然仅限于 BackBuffer (0,0,1680,1050)...

我可以使用 RenderTarget 之类的东西来扩展在“地图”上缩放/平移时可访问的实际区域吗?

我正在考虑把它做成 5000 X 3125 之类的东西......

关于我应该如何处理这个问题的任何想法/例子?

我添加了一段我正在经历的视频... http://www.youtube.com/watch?v=jIiAeXbAnec

为了记录,我还在Stack Exchange - Game Development上发布了这个问题

4

1 回答 1

1

如果我理解正确,您从中获取的坐标Mouse.GetState()始终在屏幕范围内(即:0 < x < 1680 和 0 < y < 1050)。

这个是正常的。

您正在使用的转换矩阵在“世界空间”中获取坐标并将它们放入“客户空间”(SpriteBatch然后用于将精灵投影到屏幕上的空间)。

Mouse.GetState()还返回客户空间中的坐标。您想要的是找到这些客户坐标在世界空间中代表的位置。所以你要做的就是扭转转型。这是一些(未经测试的)代码,向您展示如何:

MouseState mouseState = Mouse.GetState();
Matrix transform = whatever;
Matrix inverseTransform = Matrix.Invert(transform);
Vector2 clientMouse = new Vector2(mouseState.X, mouseState.Y);
Vector2 worldMouse = Vector2.Transform(clientMouse, inverseTransform);

(注意:如果您遇到 NaN 错误,请确保您没有将 Z 坐标缩小到零,请参见此处。)

于 2013-05-15T06:37:56.203 回答