XNA缩放和渲染目标

时间:2013-05-12 18:09:54

标签: c# scale xna-4.0 rendertarget

我正在开发一款自上而下的战略/角色扮演/塔防XNA游戏适用于Windows,我在扩展时遇到了一个问题。

我的显示模式是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

上发布了这个问题

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你从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);

(注意:如果您收到NaN错误,请确保您没有将Z坐标缩小到零,请参阅here。)