繁体   English   中英

如何在不引起闪烁的情况下更新 C# 控制台应用程序

[英]How to Update C# Console App without causing a flicker

为了好玩,我正在尝试在 C# 中编写一个简单的基于控制台的游戏引擎。 现在我想做的是建立一个简单的游戏循环,“游戏”等待用户输入,更新然后呈现然后清除屏幕然后重复。

到目前为止,这是我的代码:


int x = 0;

bool quit = false;
Task.Run(async () =>
{
    try // Catch any issues
    {
        while (!quit)
        {
            Console.WriteLine("render");
            Console.WriteLine("Position of implicit object: {0}", x);
            await Task.Delay(100);
            Console.Clear();
        }
    }
    catch (Exception e) { Console.WriteLine(e); }
});

while (!quit)
{
    ConsoleKeyInfo keyInfo = Console.ReadKey(false);
    ConsoleKey key = keyInfo.Key;

    switch (key)
    {
        case ConsoleKey.D:
            x++;
            Console.WriteLine("A-key pressed");
            break;
        case ConsoleKey.A:
            x--;
            Console.WriteLine("D-key pressed");
            break;

        case ConsoleKey.Escape:
            quit = true;
            break;
    }
}

但问题是,控制台更新时会不断闪烁。 我听说Console.SetCursorPosition(0, 0); 可能有效,但是当我尝试这样做时,似乎当用户单击屏幕时更新停止。

还有另一种方法吗? 即使它涉及改变游戏循环本身的方法。

谢谢!

请将其用作修复 Console.SetCursorPosition(0, 0),将其添加到 Console.WriteLine("render") 之前。 解决您提到的点击问题。 您必须取消选中控制台 window 上的快速编辑模式。右键单击控制台 window -> 编辑部分的属性取消选中快速编辑。 附上截图。

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM