我正在开发一款自上而下的战略/角色扮演/塔防XNA游戏适用于Windows,我在扩展时遇到了一个问题。
我的显示模式是1680 X 1050,这就是我将PreferredBackBuffer的宽度和高度设置为。
我发现当我使用我的相机对象放大和缩小(改变传递给SpriteBatch.Begin方法的矩阵上的比例时,它会改变我的精灵的比例......但是我我仍然局限于BackBuffer(0,0,1680,1050)......
我可以使用像RenderTarget这样的东西来扩展在“地图”上缩放/平移时可以访问的实际区域吗?
我正在考虑制作5000 x 3125 ......
我应该如何处理这个想法/例子?
我添加了一段我正在体验的视频...... http://www.youtube.com/watch?v=jIiAeXbAnec
上发布了这个问题答案 0 :(得分:1)
如果我理解正确,你从 这很正常。 您正在使用的转换矩阵是在“世界空间”中获取坐标并将它们放入“客户端空间”(这是 (注意:如果您收到NaN错误,请确保您没有将Z坐标缩小到零,请参阅here。)Mouse.GetState()
获得的坐标总是落在屏幕的范围内(即:0 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);