gpt4 book ai didi

c# - 在每次绘制时重绘不变的背景?

转载 作者:行者123 更新时间:2023-11-30 17:04:58 26 4
gpt4 key购买 nike

这可能是一个非常简单的问题,但我搜索并没有找到其他方法。每次 Draw 都重绘背景是没有意义的。有没有办法画一些东西并将它们留在屏幕上?

我试图注释掉

GraphicsDevice.Clear(Color.CornflowerBlue);

但这并没有帮助。 ( 它的目的是什么?)

最佳答案

XNA 和 DirectX 使用您看到的深紫色来指示未初始化的缓冲区。 XNA 还将清除此颜色的缓冲区以模拟 Xbox 360 或 Windows Phone 的行为,因此如果您在 Windows 上构建游戏,它在其他平台上“正常工作”(或者更确切地说,它在相同的平台上失败)方式,以便您可以对其进行调试)。

XNA 是双缓冲的。您不会直接绘制到屏幕上,而是绘制到“后备缓冲区”。屏幕只显示“前台缓冲区”。每次 GraphicsDevice.Present 被调用时(GameEndDraw 中为你调用它),这两个缓冲区被交换,你正在绘制的东西被显示(并且您将获得一个新的缓冲区以供使用)。

我不确定为什么 XNA 在交换缓冲区时将缓冲区标记为未初始化。我以前从未遇到过这种行为 - 主要是因为想要交换缓冲区保留其内容是非常不寻常的。

通常你想要做的是调用 Game.SupressDraw,当你知道你不会修改屏幕的内容时(保存对Draw 和交换)。另见答案 herehere .

请记住,使用 GraphicsDevice.Clear 清除屏幕的速度非常。而且 XNA 没有“背景”或“前景”的概念(您总是在缓冲区中已有的内容之上绘制)。

如果您确实有一些想要在帧之间重复使用的渲染成本高的内容,通常您会将其绘制到渲染目标一次,然后每帧将其绘制到屏幕上。但是,一如既往,避免过早优化!显卡专门设计用于每帧重绘场景 - 它们非常快!

关于c# - 在每次绘制时重绘不变的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com