C语言Windows下屏幕显示控制,适用于 C 控制台小游戏的双缓冲方法

本文介绍了如何在Windows环境下使用C语言实现控制台双缓冲技术,以避免屏幕闪烁,提高游戏或其他控制台应用的显示流畅性。通过创建额外的缓冲区,将每一帧的内容先写入缓冲区,然后一次性显示到控制台上,有效减少了闪烁现象。文章提供了详细的代码示例,包括双缓冲结构体、Mono类以及相关方法的实现。
摘要由CSDN通过智能技术生成

摘要: 在 Windows 中使用 C 语言制作控制台小游戏可用的控制台双缓冲技术,此技术可以防止画面刷新时屏幕闪烁的现象,使画面过渡较为流畅。

参考样例文件见 https://github.com/Asura336/BufferCanvas

在使用 C 语言制作控制台小游戏时,为了在画面更新的时候刷新显示内容,一个容易想到的方法是在每一帧刷新画面,Windows 下可以使用控制台命令刷新画面,形如:

// 分配一块内存当作二维数组,存储屏幕显示的信息

char** new_screen(int screen_width, int screen_height)

{

char** screen = (char**)calloc(screen_height, sizeof(char*));

for (int i = 0; i < screen_width; i++)

screen[i] = (char*)calloc(screen_width, sizeof(char));

return screen;

}

// ...

int main(void)

{

int screen_width = 80, screen_height = 80;

char** screen = new_screen(screen_width, screen_height);

// 你在这之前做了点什么,比如初始化工作

while(true)

{

// 你在这之前又做了点什么,比如为 screen 填进了每一帧的内容

system("cls");

}

// ...

}

在上述例子中使用 cls 命令清屏,而这将造成严重的屏幕闪烁。通过移动光标位置局部擦除写入的方式可以一部分改善这个问题,但如果需要重绘的部分过多,这个办法依然不好用。

使用双缓冲方法虽然不会一劳永逸地解决闪屏,但多半能一劳很久逸。所谓双缓冲即是为控制台显示增加一块缓冲区域,每一帧的显示在缓冲区域进行,写入完成后直接放到在活动的控制台显示区域。现代计算机处理数据的速度已经很快,相对而言慢的部分在输出文字到显示器这一步,所以在每一帧将字符放置到缓冲区域再一起显示完全来得及

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值