我正在开发一个游戏。我想在屏幕上绘制几个纹理。我通过使用 spriteBatch 绘制 texture2d 成功地实现了这一点。
问题是只有当我将代码放在 onDraw 方法中时才会显示纹理。onDraw 方法绑定到计时器,因此它会执行很多次。我只想画一次我的矩形。
当我将代码放入构造函数时,矩形不会显示 - 只有当我将代码放入 onDraw 函数时它们才会显示。我怎么能省略呢?
我正在开发一个游戏。我想在屏幕上绘制几个纹理。我通过使用 spriteBatch 绘制 texture2d 成功地实现了这一点。
问题是只有当我将代码放在 onDraw 方法中时才会显示纹理。onDraw 方法绑定到计时器,因此它会执行很多次。我只想画一次我的矩形。
当我将代码放入构造函数时,矩形不会显示 - 只有当我将代码放入 onDraw 函数时它们才会显示。我怎么能省略呢?
在 XNA 中这样做并没有任何明智的选择。大多数游戏都想在每一帧重新绘制整个屏幕——这就是 XNA 的结构。(而且,如果没有真正令人信服的理由,这也是你应该如何构建游戏的方式。)
XNA 是双缓冲的(我认为没有办法将其关闭)。您在后缓冲区上进行绘图,然后将其与前缓冲区交换。您永远不会直接在屏幕上绘图。
因此,虽然您不必清除屏幕并在每一帧上重新绘制它,但如果您不这样做,您必须手动保持这两个缓冲区的内容同步 - 否则会出现严重闪烁。这不值得努力。
您可能正在寻找的是Game.SupressDraw
方法(从 - 或 - 调用它Update
作为替代方法:覆盖BeginDraw
和返回false
)。这将防止Draw
为该特定帧调用,并防止后缓冲区被交换到前面。所以前一帧只是停留在屏幕上。
但通常更容易简单地绘制每一帧。