如何使用C# Timer定时器实现定时切换ASCII文本的动画效果
实现方案
核心逻辑很简单,你现有1秒触发一次的Timer已经满足基础需求,只需要调整触发事件的逻辑即可:
- 提前定义好原始ASCII文本和切换后ASCII文本两个变量
- 用现有计数器
timerPlayerOneAnimation的奇偶值判断当前要显示的文本:奇数次触发(对应第1、3、5...秒)显示切换后的文本,偶数次触发(对应第2、4、6...秒)切回原始文本 - 控制台输出不要换行,每次覆盖上一行内容就能实现动画效果,避免刷屏
完整修改代码
// 提前定义两个文本,替换成你自己的ASCII内容即可 private const string OriginalAscii = "[ 站立 ]"; private const string ChangedAscii = "[ 跳跃 ]"; private int timerPlayerOneAnimation = 0; public void TimePassed() { // 1秒触发一次,默认AutoReset=true会循环触发 Timer t1 = new Timer(1000); t1.Elapsed += Timer_Elapsed; t1.Start(); Console.ReadKey(); t1.Stop(); // 停止后恢复光标显示,避免后续输出异常 Console.CursorVisible = true; } public void Timer_Elapsed(object sender, ElapsedEventArgs e) { timerPlayerOneAnimation++; // 把光标移到当前行开头,覆盖输出 Console.SetCursorPosition(0, Console.CursorTop); // 奇数秒显示切换后文本,偶数秒显示原始文本 string showText = timerPlayerOneAnimation % 2 == 1 ? ChangedAscii : OriginalAscii; // 输出后补空格清除可能残留的上一次文本的多余字符 Console.Write(showText.PadRight(Console.WindowWidth - 1)); }
额外说明
如果你的ASCII文本是多行内容,只需要在输出前把Console.CursorTop向上移动和文本行数相等的数值即可,其余逻辑完全通用。
内容的提问来源于stack exchange,提问作者Felipe Hernández Bescós
相关产品推荐
相关产品推荐

