Console.Clear() 闪烁

问题描述 投票:0回答:3
while (true)
{
   Console.Clear();
   for (int row = 0; row < 50; row++)
   {
      for (int col = 0; col < 50; col++)
      {
        Console.Write(world[row, col]);
      }
      Console.WriteLine();
   }
      Thread.Sleep(500);
}

我正在写一个游戏,我有一个人物,由 10 个角色组成。我希望当单击某些箭头按钮时它会在字符数组中移动。问题是这个游戏根本不流畅。当使用

Console.Clear()
时,控制台会反复闪烁,这很烦人。这个问题有什么解决办法吗? (如果我不想使用
Console.SetCursorPosition()
,因为它会让制作这个游戏变得更加困难)。

c# console
3个回答
3
投票

尝试将所有场景汇总到 1 个字符串中,然后立即绘制它。这会将闪烁效果“隐藏”到一定程度:

string scene = "";

// iterate your array to construct the scene string
for (int row = 0; row < 50; row++)
{
   for (int col = 0; col < 50; col++)
   {
      scene += world[row, col];
   }
   scene += '\n'; // new line
}
Console.Clear();  // thanx David
Console.Write(scene);

2
投票

我自己从未这样做过,但您也许可以通过将 Console.BufferHeight 的大小加倍来创建穷人的双缓冲方案。当您准备好绘制时,Console.SetCusorPosition()一次到离屏缓冲区的开头,像平常一样绘制场景,然后使用Console.MoveBufferArea()将刚刚绘制的区域移开-屏幕场景到屏幕上。


0
投票

它闪烁是因为 Console.Clear() 太慢。 要加快速度,请使用以下任一方法增加缓冲区大小:

Console.BufferHeight = int;
Console.BufferWidth = int;

或者这个:

Console.SetBufferSize(width, height);
© www.soinside.com 2019 - 2024. All rights reserved.