7

我使用 console.out.writeline() 来打印属于 XNA 游戏中不同精灵的坐标。但几秒钟后,游戏开始变得非常缓慢,几乎停止。
(不写入控制台时,性能没有问题)。(精灵的位置写在每个更新方法中)

有没有办法在不破坏游戏性能的情况下写入控制台?

4

5 回答 5

8

您是否能够写入日志文件而不是控制台?由于缓冲和缺乏滚动、显示等,这可能会更快。

当它运行时,你真的有一个控制台吗?如果是这样,请在您不感兴趣时​​尝试将其最小化。我的猜测是导致问题的滚动。

编辑:好的,似乎有一些证据是有序的。

一些测试......我没有安装 XNA,但不同的写入控制台的方式仍然很有趣。我将数字 0-99999 写入各种控制台:

  • 作为 WinForms 应用程序,在调试器下,到 Visual Studio 控制台:135000 毫秒,无论控制台是可见的还是被隐藏的。
  • 作为 WinForms 应用,在调试器下,写入文件:160ms
  • 作为控制台应用程序,不在调试器下,控制台最小化:4149ms
  • 作为控制台应用程序,不在调试器下,控制台未最小化:14514ms

如您所见,Visual Studio 控制台非常缓慢,非最小化的“普通”控制台次之,最小化的控制台相当简单,写入文件非常快。

我坚持我的建议,尝试写入文件而不是控制台,否则,如果它是一个独立的控制台,请尝试在大多数情况下将其最小化。

于 2009-02-04T17:37:07.357 回答
4

“有没有办法在不破坏游戏性能的情况下写入控制台?”

好吧,你可以像大多数游戏引擎一样创建自己的游戏控制台(最著名的是 Quake),并在按下某个键时显示控制台。

编辑:

如果您不想实现自己的控制台,有一个项目可以这样做:

http://www.codeplex.com/XnaConsole

它比 Win32 控制台具有优势,因为它在游戏中以游戏帧速率运行,并且在控制台和 xna 应用程序之间切换时不会让您丢失设备。(虽然在 XNA 中设备恢复是自动的,但丢失设备仍然会在幕后发生)

于 2009-02-04T17:35:26.300 回答
3

您可能正在向控制台写入太多数据。通过使用计数器或计时器来降低控制台写入的频率。每秒一次更新通常足以查看您需要的内容。

于 2009-02-04T20:56:30.480 回答
2

我知道这是一篇旧帖子,但对于那些有类似问题的人来说,有更好的方法。您可以包含另一个控制台类型的库,它非常易于使用(比 xna 控制台项目容易得多)。它被称为 XNA 调试终端,可以在http://www.protohacks.net/xna_debug_terminal
找到它在 游戏顶部放置一个类似命令窗口的终端,并允许您查看/设置任何变量的值,调用任何方法,甚至实时观察值的变化。它是完全开源的,可与 XNA 3.0 和 XNA 3.1 一起使用。这可以让您在游戏执行期间随时轻松查看精灵坐标(或其他任何内容)。

于 2010-09-04T21:58:56.360 回答
0

简单地说,您可以执行以下操作:

创建一个名为 eg 的类Trace,并在 draw 方法中使用它在屏幕上绘制所需的信息,SpriteBatch.DrawString(...)这比我猜的 Console 更好..

我希望这有帮助,

和平。

于 2012-02-13T13:17:24.723 回答