使用三元光栅贴图控制人物的左右移动(使用了BeginBatchDraw()),但是出现了闪烁问题向左闪烁,但向右不闪烁

0

我觉的有问题的部分,第一个循环正常,第二个循环出现闪烁。

else
		{
			if (flag == 0)
			{    //面向右站着
				for (i = 0; i < 4; i++)
				{
					putimage(0, 0, 640, 480, &bk, 300, 900, SRCCOPY);
					putimage(cat_x, cat_y, 64, 64, &cat1, 64 * i, 0, NOTSRCERASE);
					putimage(cat_x, cat_y, 64, 64, &cat, 64 * i, 0, SRCERASE);
					FlushBatchDraw();
					Sleep(100);
					
				}
			}
			else if(flag == 1)
			{
				//面向左站着
				for (i = 0; i < 4; i++)
				{
					putimage(0, 0, 640, 480, &bk, 300, 900, SRCCOPY);
					putimage(cat_x, cat_y, 64, 64, &cat3, 1024 - 64 * i, 0, NOTSRCERASE);
					putimage(cat_x, cat_y, 64, 64, &cat2, 1024 - 64 * i, 0, SRCERASE);
					FlushBatchDraw();
					Sleep(100);
				}
			}
ava
Doraemon

2020-6-23

0

你的代码并不完整,无法确定问题出在哪。建议先修改:在一次主循环中,只在最后出现一次 FlushBatchDraw() 和 Sleep(100)。而你在一个主循环中至少出现了两个 FlushBatchDraw() 和 Sleep(100),结构上不合理。

修改之后如果还有问题,再贴出来(删掉无关代码,保留可以编译的且含有问题的代码)。

PS:有比三元光栅贴图法更好用的透明贴图方法,请参考:https://codeabc.cn/yangw/a/transparent-putimage

ava
慢羊羊

2020-6-23