- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能是一个非常简单的问题,但我搜索并没有找到其他方法。每次 Draw 都重绘背景是没有意义的。有没有办法画一些东西并将它们留在屏幕上?
我试图注释掉
GraphicsDevice.Clear(Color.CornflowerBlue);
但这并没有帮助。 ( 它的目的是什么?)
最佳答案
XNA 和 DirectX 使用您看到的深紫色来指示未初始化的缓冲区。 XNA 还将清除此颜色的缓冲区以模拟 Xbox 360 或 Windows Phone 的行为,因此如果您在 Windows 上构建游戏,它在其他平台上“正常工作”(或者更确切地说,它在相同的平台上失败)方式,以便您可以对其进行调试)。
XNA 是双缓冲的。您不会直接绘制到屏幕上,而是绘制到“后备缓冲区”。屏幕只显示“前台缓冲区”。每次 GraphicsDevice.Present
被调用时(Game
在 EndDraw
中为你调用它),这两个缓冲区被交换,你正在绘制的东西被显示(并且您将获得一个新的缓冲区以供使用)。
我不确定为什么 XNA 在交换缓冲区时将缓冲区标记为未初始化。我以前从未遇到过这种行为 - 主要是因为想要交换缓冲区并保留其内容是非常不寻常的。
通常你想要做的是调用 Game.SupressDraw
,当你知道你不会修改屏幕的内容时(保存对Draw
和交换)。另见答案 here和 here .
请记住,使用 GraphicsDevice.Clear
清除屏幕的速度非常。而且 XNA 没有“背景”或“前景”的概念(您总是在缓冲区中已有的内容之上绘制)。
如果您确实有一些想要在帧之间重复使用的渲染成本高的内容,通常您会将其绘制到渲染目标一次,然后每帧将其绘制到屏幕上。但是,一如既往,避免过早优化!显卡专门设计用于每帧重绘场景 - 它们非常快!
关于c# - 在每次绘制时重绘不变的背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904829/
我对 NSButton 进行子类化并执行自定义绘图。我实现方法 -mouseDown 和 -mouseUp。当我执行短(快速)单击时,我的代码工作完美,但如果我按住鼠标左键一段时间然后释放它,方法 -
我是一名优秀的程序员,十分优秀!