2

是否可以在调整窗口大小以使其不拉伸时继续渲染和更新?

4

1 回答 1

2

这深深地融入了 XNAGame类的行为。我现在正在处理这个确切的问题,但我还没有一个好的解决方案。编辑:我现在是如何找到解决方案的——但它没有回答关于缩放的问题——所以我把它作为问题/答案对发布在这里

您可能会潜入思考并断开在开始调整大小时暂停游戏计时器的事件(并在停止时取消暂停)。我还没有尝试过,我有点讨厌在不了解它们为什么存在的情况下这样做。

(就我个人而言,我正在考虑让我的游戏也订阅调整大小的开始/结束事件,然后让Update自己在适当的计时器上抽水,直到 XNA 回来。我不会担心显示的缩放。)


解决此问题的一种方法是Game完全替换该类。XNA WinForms Sample提供了一个合适的替代品——尽管您必须实现自己的 Draw/Update 循环和计时。我刚刚在旧的关卡编辑器中对此进行了测试,并且在调整大小时它可以按照您的意愿工作。

尽管当您使窗口变大时它确实会减慢很多,因为它会不断重新分配后台缓冲区以使其更大。您可以替换该行为以使其过度分配后备缓冲区大小,因此它不会经常重新分配。


潜在问题与 win32 有关,并在 GameDev.net 上的此线程中进行了详细描述。但它也没有真正提供令人满意的解决方案。

有趣的是,WinForms 示例利用了它的OnPaint方法(并且您通过不断调用得到一个循环Invalidate)。而 XNA 的内置Game类订阅Application.Idle.

于 2013-02-26T07:22:48.843 回答