XNA - 更新方法与绘制方法

Posted

技术标签:

【中文标题】XNA - 更新方法与绘制方法【英文标题】:XNA - Update method vs Draw method 【发布时间】:2012-12-06 12:15:58 【问题描述】:

我很想知道,如果我将所有精灵动画/运动逻辑放在 Draw 方法中而不是 Update 方法中,并且 update 方法只是管理触摸和其他事件。 1) 游戏动画/逻辑性能有什么问题吗? 2) 游戏画面会不会像预期的那样?

【问题讨论】:

【参考方案1】:

draw 和 update 方法之间基本上有一大区别。 draw 方法随着机器的性能循环运行,因此如果计算机速度较慢,如果计算机性能低,您可能会每秒获得 30 个循环。这也意味着周期不是固定的,所以前一秒你可能会从 draw 方法中得到 30 个周期,而下一次你可能会得到 40 个。

更新方法有固定的周期数,所以这意味着游戏不会因为电脑慢而变慢。

把精灵动画逻辑放在draw方法里面是没有问题的。这只是意味着动画将以机器可以处理的速度运行。但是,如果动画直接影响游戏中的其他逻辑,我建议将代码放在更新线程中。

【讨论】:

在这种情况下(30 fps 或 40 fps 并且没有同步黑白方法),如果我需要在更新和绘制之间运行 1 对 1,可以做什么? @Yogesh 尝试将所有绘图代码移动到更新方法,虽然这是不寻常的,不推荐。 @Yogesh Draw 将始终以 1:1 的比例运行您的 Update 方法,除非您开始丢帧(在默认配置中)。一般来说,您的逻辑应该足够灵活,以应对 Draw 未被调用。

以上是关于XNA - 更新方法与绘制方法的主要内容,如果未能解决你的问题,请参考以下文章

Alpha蒙版边界框透明与其他alpha蒙版冲突/覆盖。 XNA

XNA(MonoGame)零异常

MonoGame / XNA在Spritebatch中绘制多边形

尝试在具有四边形的XNA中绘制带纹理的立方体基元

C# XNA - 如何使用 2 个矩形变量绘制动画纹理?

[XNA问题,绘制许多不同批次时