Console.Clear()闪烁

时间:2015-02-13 00:04:15

标签: c# console

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(),因为这使得制作这个游戏变得更加困难)。

3 个答案:

答案 0 :(得分:2)

尝试将所有场景加在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);

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

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

或者这个:

Console.SetBufferSize(width, height);