图片在移动的过程中有严重抖动

0
#include <easyx.h>

int main()
{

	initgraph(1600, 900);
	IMAGE* image = new IMAGE();
	loadimage(image, _T(R"*(.\Resources\Textures\test.jpg)*"));
	float x = 0;

	BeginBatchDraw();

	while (true)
	{
		cleardevice();
		putimage(x, 0, image);
		x += 5;
		FlushBatchDraw();
		Sleep(10);
	}

	EndBatchDraw();
}

效果如这个GIF图 :https://tieba.baidu.com/p/7285324832

ava
你好

2021-4-3

0

问题出在 Sleep(10) 语句上。

Sleep 只是一个普通的延时语句,这个语句并没有考虑其它代码的执行时间。并且,Sleep 的精度通常是在 1~18ms 之间,不稳定。这些导致了使用 Sleep 的动画需要做额外处理。

这里介绍两个方法:

1. 使用精确延时。可以参考:https://codebus.cn/yangw/a/accurate-delay

2. 使用 Sleep,但是每次的移动量不能是固定的,而要在每次累加位移的时候,用多媒体计时器获得精确时间,并且算出来与上次计算之间的时间差。由于速度固定,所以根据这个时间差,计算出来需要移动的精确距离,再累加并显示。

ava
慢羊羊

2021-4-3