帮我看下代码`图为啥闪动啊

时间:2022-08-19 10:35:52
BLENDFUNCTION bf;
bf.BlendOp=AC_SRC_OVER;
bf.AlphaFormat=0;
bf.BlendFlags=0;
bf.SourceConstantAlpha=200;

HDC MemDC;
                dir="five_mask.bmp";
if(loadbmp(dir)==FALSE)
MessageBox("Sorry!");
SelectObject(MemDC,bit);
AlphaBlend(dc.m_hDC,0,0,xx,yy,MemDC,0,0,xx,yy,bf);
DeleteDC(MemDC);
SetTimer(1,20,NULL);

      OnPaint中vc6.0
图显示出来了`但是闪的厉害`这是最上一层`背景和人物都不闪`双缓冲也实现了呀
高手快帮我改一下我试试

10 个解决方案

#1


SetTimer(1,20,NULL);什么意思?

#2


因为你的定时器频率太低了..

#3


你的计时器上做了什么?

#4


定时器做的事与这些无关
主要是让人物移动与处理人物走路`
这是人物下的蔗挡
双缓冲不是不管多快都不会闪的吗
我上面还有一张背景图`全屏的一点不闪`就是这个后加的闪

#5


双缓冲不是不管多快都不会闪的吗
没这么nx吧。

#6


代码一句句删除,看大概哪里出了问题。

#7


就第一层不闪`原来人物也闪`跟频率没有关系`我设慢了就是跳的慢了`但人也走的慢了

#8


DLG的话,在classwizzard->class info 里把message filter改为WINDOW
然后添加WM_EraseBkgnd,return 1试试看

#9


需要处理WM_EraseBkgnd消息,返回TRUE

#10


引用 9 楼 b2b160 的回复:
需要处理WM_EraseBkgnd消息,返回TRUE

像这样闪的,最好整个背景都自己绘制,而且像9楼说的,WM_EraseBkgnd消息,返回TRUE

#1


SetTimer(1,20,NULL);什么意思?

#2


因为你的定时器频率太低了..

#3


你的计时器上做了什么?

#4


定时器做的事与这些无关
主要是让人物移动与处理人物走路`
这是人物下的蔗挡
双缓冲不是不管多快都不会闪的吗
我上面还有一张背景图`全屏的一点不闪`就是这个后加的闪

#5


双缓冲不是不管多快都不会闪的吗
没这么nx吧。

#6


代码一句句删除,看大概哪里出了问题。

#7


就第一层不闪`原来人物也闪`跟频率没有关系`我设慢了就是跳的慢了`但人也走的慢了

#8


DLG的话,在classwizzard->class info 里把message filter改为WINDOW
然后添加WM_EraseBkgnd,return 1试试看

#9


需要处理WM_EraseBkgnd消息,返回TRUE

#10


引用 9 楼 b2b160 的回复:
需要处理WM_EraseBkgnd消息,返回TRUE

像这样闪的,最好整个背景都自己绘制,而且像9楼说的,WM_EraseBkgnd消息,返回TRUE