VC贴图 ,双缓冲 ,三缓冲

VC贴图 ,双缓冲 ,三缓冲

 

技术点滴 2010-08-05 10:13:58 阅读331 评论0   字号:大中小 订阅

下面开始贴图:

  1.导入图片(假设图片为map.bmp).

       test resources那里单击右键,选择Insert...,在弹出的Insert Resource

       对话框左边选择Bitmap,然后点击右边的Import,打开文件map.bmp,这时候有可能弹出一

       个对话框说一长串话,管它的呢,确定吧。然后看到Resources里面就多了一个Bitmap,

       它下面就有一张图片了,IDIDB_BITMAP1,这个ID可以自己修改。

      

      以下工作的CTestView类的OnDraw函数中进行.

    2.创建位图对象,并与要显示的图片(此处为IDB_BITMAP1标识的图片)关联. 

     

       CBitmap bmp;

     bmp.LoadBitmap(IDB_BITMAP1);

 

   3.创建兼容的DC,即内存DC.

 

       CDC memDC;

       memDC.CreateCompatibleDC(pDC);

    

    4.将位图对象选入兼容DC.

  

       memDC.SelectObject(&bmp); 

   

    5.将兼容DC中的位图贴到窗口.

  

      pDC->BitBlt(x,y,width,height,&memDC,0,0,SRCCOPY);

      其中(x,y)表示图片的左上角在窗口中的坐标,

      idth,height分别表示图片的宽度和高度.

     

      这样贴图就完成了.  

  

    但是在许多游戏编程中会出现画面不停的闪烁的情况,这是由于游戏中的物体是

      不停的运动的,那就要不断的贴图,但是贴图是需要一定的时间的,当贴图更不上的时候,那就会闪了

 

      要解决这个问题可以用DirectX,这里不做介绍.我要讲的是用缓冲机制解决:

  

   1.同上面的2,3,4:

    

        CBitmap bmp;

        bmp.LoadBitmap(ID);

        CDC memDC;

        memDC.CreateCompatibleDC(pDC);

        memDC.SelectObject(&bmp);

      

     2.创建一个与你的窗口一样大的(如果是全屏的那就是整个屏幕的大小)兼容DC(及用于缓

       冲的DC)和兼容位图,并将兼容位图选入兼容DC   

         

     CBitmap BkMap;

     BkMap.CreateCompatibleBitmap(pDC,w,h);//w,h表示窗口的宽和高

     CDC BkDC;

     BkDC.CreateCompatibleDC(pDC);

     BkDC.SelectObject(&BkMap); 

 

    3.在缓冲DC上贴图

 

     BkDC.BitBlt(x,y,width,height,&memDC,0,0,SRCCOPY);

 

     如果有多张图片要同时贴在屏幕上,如有背景图,前景图,还可能有许

       多小图片,那也要把这些图全部贴在这个缓冲DC上。

 

    4.把缓冲DC的图片贴到屏幕。

    

       pDC->BitBlt(0,0,w,h,&BkDC,0,0,SRCCOPY); 

    

     这就完成了缓冲,就是说贴每个图的过程全部都在缓冲DC上面完成,等所有的图

       都贴到了缓冲DC上后,就把缓冲DC上的图一次性的贴到屏幕上。    

     但是这样还会存在一个问题,假设一个运动的物体运动过一个轨迹的话,那么这

       个轨迹上面都会有这个物体,因为物体经过后,原来地方的图片并没有被搽除。

     要解决这个问题也很简单,只要在每次往缓冲DC上面贴图的时候把缓冲DC”搽“

       一下就可以了:怎么搽?往上面贴一张同样大小的白色图片不就把上面的内容搽?也可以用FillXXX函数进行填充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值