适用于 C 控制台小游戏的双缓冲方法

摘要: 在 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 命令清屏,而这将造成严重的屏幕闪烁。通过移动光标位置局部擦除写入的方式可以一部分改善这个问题,但如果需要重绘的部分过多,这个办法依然不好用。

使用双缓冲方法虽然不会一劳永逸地解决闪屏,但多半能一劳很久逸。所谓双缓冲即是为控制台显示增加一块缓冲区域,每一帧的显示在缓冲区域进行,写入完成后直接放到在活

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值