是否可以在调整窗口大小以使其不拉伸时继续渲染和更新?
1 回答
这深深地融入了 XNAGame
类的行为。我现在正在处理这个确切的问题,但我还没有一个好的解决方案。编辑:我现在是如何找到解决方案的——但它没有回答关于缩放的问题——所以我把它作为问题/答案对发布在这里。
您可能会潜入思考并断开在开始调整大小时暂停游戏计时器的事件(并在停止时取消暂停)。我还没有尝试过,我有点讨厌在不了解它们为什么存在的情况下这样做。
(就我个人而言,我正在考虑让我的游戏也订阅调整大小的开始/结束事件,然后让Update
自己在适当的计时器上抽水,直到 XNA 回来。我不会担心显示的缩放。)
解决此问题的一种方法是Game
完全替换该类。XNA WinForms Sample提供了一个合适的替代品——尽管您必须实现自己的 Draw/Update 循环和计时。我刚刚在旧的关卡编辑器中对此进行了测试,并且在调整大小时它可以按照您的意愿工作。
尽管当您使窗口变大时它确实会减慢很多,因为它会不断重新分配后台缓冲区以使其更大。您可以替换该行为以使其过度分配后备缓冲区大小,因此它不会经常重新分配。
潜在问题与 win32 有关,并在 GameDev.net 上的此线程中进行了详细描述。但它也没有真正提供令人满意的解决方案。
有趣的是,WinForms 示例利用了它的OnPaint
方法(并且您通过不断调用得到一个循环Invalidate
)。而 XNA 的内置Game
类订阅Application.Idle
.