我现在在做一个动画小程序,需要画一个不断移动的小人,其中需要再不同的位置画上这个小人,并擦除原来画的,以实现动画的效果,请问一下如何擦除原来画的图像呢?
 或者各位大哥大姐有更好的办法实现这个动画程序呢?
  我是初学者,希望各位讲得浅显点,谢谢

解决方案 »

  1.   

    Invalidate() 写在什么地方啊,写错了,就什么也看不到了
      

  2.   

    图形擦除是图形特技处理中最为常见的一种,在各种游戏中图形擦除技术有着广泛的应用。图形擦除在本质上是图形的消隐,即在两幅图片之间进行图片的平滑过渡显示。过渡的方式决定了图形擦除的不同视觉效果,其中最为常见的一种就是图片淡入淡出的更新:两幅图片由明到暗、由暗到明的循环交替显示。这种特技效果在编程中的实现,往往是通过DirectX技术实现的。建议你学习DirectX
      

  3.   

    老天,你要是不断的重新invalidate(),速度哪儿能好啊,mfc中可以参照《深入浅出》
    用个rect框起来处理一小部分就可以 这样好的多,但是directx应该更好 。
      

  4.   

    用invalidate(),可是好像不能擦除的,我试过了
      

  5.   

    要想移动前景,背景不变,这个好办:
        自己需要判断两个区域,rect_old和rect_new,当两个区域重叠时,利用RGN函数求得rect_old为一个六边形(去除重叠部分),用背景刷新的方法重现该区域的背景(当然,时春色背景的话,就直接填充啦),对于rect_new区域,直接画就行了,该方法流畅而又不会闪烁。试试吧!
      

  6.   

    我刚做了这样的程序,可怜 CSDN 上对这个问题一直 没有什么好的答案 ,干脆自己摸索这样子 解决,  
    1.你在内存位图作图
    2.作图前重绘 上次的内存位图
      GetClientRect( &rect) ;
     CBrush brush ;
     brush.CreateSolidBrush(RGB(255,255,255)) ;

    //m_pdcMemory->PatBlt(0,0,rect.Width() ,rect.Height() ,PATCOPY   ) ;
     m_pdcMemory->FillRect( &rect , &brush) ;
    3. 在内存位图上 继续你的绘画补充一句 :
    ItomCat(喜欢变成) 讲的思路是对的
      

  7.   

    我记不清是哪本书上或者是msdn上面有一个例程序是关于多线程的就是画几个小人赛跑的程序我相信那个会有帮助的.暂时我确实想不起来是哪本书上面的例子了但是这个例子很有名的应该很好找,我找到了定会告诉你的