【问题标题】:XNA Scale and Render TargetsXNA 缩放和渲染目标
【发布时间】:2013-05-06 19:22:16
【问题描述】:

我正在开发适用于 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上发布了这个问题

【问题讨论】:

  • 你试过移动整个世界而不是移动相机吗?它应该会产生相同的效果,并且您不需要渲染更大的拓扑。
  • 我有......但它仍然无法帮助缩放......即使它放大和缩小,鼠标仍然包含在视口的缩放范围内......我想我错了...我正在考虑在精灵级别而不是在全局级别缩放精灵...
  • 今天下午晚些时候我要录制一个视频,一个视频值 10,000 字。

标签: c# scale xna-4.0 rendertarget


【解决方案1】:

如果我理解正确,您从Mouse.GetState() 获得的坐标始终在屏幕范围内(即:0

这是正常的。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2014-04-23
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多