这可能是一个非常简单的问题,但我搜索后发现没有其他方法可以做到这一点。每次绘制时都重新绘制背景是没有意义的。有没有办法画一些东西并将它们留在屏幕上?
我试图注释掉
GraphicsDevice.Clear(Color.CornflowerBlue);
但这没有帮助。 (什么is它的目的?)
您看到的深紫色由 XNA 和 DirectX 使用来指示未初始化的缓冲区。 XNA 还将清除此颜色的缓冲区,以模拟 Xbox 360 或 Windows Phone 的行为,因此,如果您在 Windows 上构建游戏,它在其他平台上“正常运行”(或者更确切地说,它会在相同的情况下失败)方式,以便您可以调试它)。
XNA 是双缓冲的。您不会直接绘制到屏幕,而是绘制到“后缓冲区”。屏幕仅显示“前缓冲区”。每次GraphicsDevice.Present
被呼叫(Game
为你打电话EndDraw
),这两个缓冲区被交换,并且您正在绘制的内容被显示(并且您将获得一个新的缓冲区来绘制)。
我不确定为什么 XNA 在交换缓冲区时将其标记为未初始化。我以前没有遇到过这种行为 - 主要是因为想要交换缓冲区是非常不寻常的and保留其内容。
通常你想做的是打电话Game.SupressDraw
,当您知道您不会修改屏幕内容时(保存对Draw
和交换)。另请参阅答案here https://stackoverflow.com/a/4236431/165500 and here https://stackoverflow.com/a/4057180/165500.
请记住,使用以下命令清除屏幕GraphicsDevice.Clear
is 极其快速地。 XNA 没有“背景”或“前景”的概念(您总是在缓冲区中已有的内容之上进行绘制)。
如果您确实有一些渲染成本高昂的内容想要在帧之间重复使用,通常您会将其绘制到渲染目标一次,然后每帧将其绘制到屏幕上。但是,一如既往,避免过早优化!显卡是专门为每帧重绘场景而设计的 - 它们的速度非常快!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)