有没有比使用 Console.Clear() 更好的方法来制作控制台游戏?

Posted

技术标签:

【中文标题】有没有比使用 Console.Clear() 更好的方法来制作控制台游戏?【英文标题】:Is there a better way to make console games than with Console.Clear()? 【发布时间】:2009-08-15 21:01:00 【问题描述】:

我正在玩游戏循环,并打算创建一些游戏作为练习。

目前我有一个稳定的游戏循环,游戏会尽快更新,渲染每秒更新 x 次(目前为 25 次)

渲染方法基本上是 draw + Console.Clear() 并且在非常高的更新时显示变得非常抖动,因为当 Console.Clear() 命中时它还没有完成绘制。

有没有更好的方法来做这样的事情?

我可以将任何数据写入控制台,然后用其他数据替换吗?

【问题讨论】:

【参考方案1】:

假设你在每个循环中再次从左上角写一个全屏,你可以简单地将 Clear() 替换为:

 Console.SetCursorPosition(0, 0);

并覆盖上一个屏幕。

【讨论】:

啊,这可能是我所经历的关键。谢谢:)【参考方案2】:

由于您使用的是 C#,因此您可能需要查看 XNA Framework。

我猜你的问题是因为 Console.Clear() 没有针对这种用途进行优化,因为 XNA 使用了类似的方法(Clear()GraphicsDevice 上被调用)。

如果您不想尝试使用 XNA,那么绘制一个矩形(纯黑色或灰色或其他)可能比调用 Clear() 来“清空”屏幕然后在上面绘制可能更快.

【讨论】:

我从控制台开始了解游戏循环的基本内部工作原理。但是在数据上画一张白纸而不是 Console.Clear() 可能会更快。【参考方案3】:

你可能想查看ConsoleLibrary

我没有使用它,但从文章/演示来看,它似乎可以让你在控制台上做很多整洁的事情。

【讨论】:

以上是关于有没有比使用 Console.Clear() 更好的方法来制作控制台游戏?的主要内容,如果未能解决你的问题,请参考以下文章

获取向量的最后 n 个元素。有没有比使用 length() 函数更好的方法?

PHP 有没有比使用标题(位置)更好的方法来保护我的页面?

有没有比 mciSendString 更好的播放 Mp3 的方法?

有没有比在开头使用 1=1 更好的方法来动态构建 SQL WHERE 子句?

对于 Ruby 应用程序,有没有比 Sanitize 更好的替代方案?

有没有比 `const` 更好的方法来存储大块文本?