VC++位图移动问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 07:52:11
想用SetTimer控制一个位图移动,有没有只移动位图,不留下轨迹的函数。因为移动的位图有好几幅,所以在后面画矩形覆盖的方法不现实的。
客户区同时还有别的位图啊,重绘窗口的话会覆盖的呀

把整个客户区背景重新涂一遍就行了。之后再贴图。

如果背景也是一副位图,那就在加载移动的位图之前,先贴背景图,便会覆盖前一帧所有图片;之后再贴移动的位图。

这是基本的二维动画技巧。

/////////////////////////////////////////////////////

当收到定时器消息时,全部位于客户区的位图都要重绘!按照“前后”顺序——最底下的(一般是背景图)最先贴图,离屏幕最近的最后贴图。做动画有种技巧叫“Z-ORDER”,就是这个意思。

简言之,你不能只贴移动的图,要全部重新贴图。

另外这个也没必要多线程,如果你对贴图效率不满意的话可以考虑多建几个。单线程在贴图数量不多时,丝毫不会在视觉上造成什么“延迟”的感觉。事实上我曾试过没1/60秒将1024*768,基于32位色深的画面贴到主画面上(使用3级缓冲),有贴了许多其他图,程序稳定在60帧每秒。当然那是专门的动画程序,对图形图像进行了一些优化。性能要明显强过一般的窗口程序。

貌似这个问题要多线程才能实现,每个移动的位图一个线程。
ps:我也不会,不过好像在一本书中看到过类似的例子,就是讲多线程的。

介绍一个函数把一种指定的颜色变成透明色,并可改变大小看懂了差不多就可以
// hdc 显示句柄
// hBitmap要显示的位图
// xStart,xStart显示的位置
// xadd,yadd显示的位图的大小变化:放大缩小
// 如:xadd=3表示位图宽度加3
// cTransparentColor变成透明的那种颜色
void CMy1_6View::TransparentBitmap(HDC hdc, HBITMAP hBitmap,short xStart, short yStart, short xadd,short yadd, COLORREF,cTransparentColor)
{

BITMAP m_bm;

COLORREF