双缓存技术

双缓存技术 

一个关于双缓存及普通绘图的链接:http://download.youkuaiyun.com/download/i_likechard/9676667




做了几个游戏发现每次刷屏时都会闪烁。这个问题怎么解决呢?当然是双缓存技术最好,解决问题面也最广!网上有很多双缓存技术的文章,可是很多说的不全。要你和我一样用了双缓存技术却还是闪屏,也许你直接看第五点就可以解决你的问题。
    首先,简单讲一下双缓存技术(网上文章都会讲,知道就跳过此段)。双缓存技术就是在内存区先画一个位图,画好后直接将这个图一个点一个点覆盖到屏幕上,这个过程非常快,所以不会出现闪屏。

    下面结合例子讲下步骤。比如要重画两个旗子和一张背景图:


    黑棋:m_bitblack; 资源:IDB_BITMAP1
    白棋:m_bitwhite; 资源:IDB_BITMAP2
    背景:m_bitbk;    资源:IDB_BITMAP3
    1 view类中定义这三个位图。构造函数中把对应的资源给位图。
    例如:view:CBitmap m_bitblack;
          构造:m_bitblack.loadbitmap(IDB_BITMAP1);
          其他也如此定义。
    2 在Ondraw中定义一个CBitmap类型的对象membit.并定义大小:
        CBitmap membit;
        membit.CreateCompatibleBitmap(pDC,宽,高);
      然后定义一个dc用于缓存区,定义三个dc用于黑白棋和背景,
        CDC dc;
        CDC bkdc,ftdc1,ftdc2;
      创建与显示设备兼容的设备
       
        dc.SelectObject(membit);
      将黑白棋子以及背景分别传给他们:
       
        bkdc.SelectObject(m_bitbk);
        ftdc1.SelectObject(m_bitblack);
        ftdc2.SelectObject(m_bitwhite);
    3 将黑白棋子和背景分别在缓存区图上画出。
        dc.bitblt(0,0,宽,高,&bkdc,0,0,SRCCOPY);//此函数请自己查用法
        dc.bitblt(0,0,15,15,&ftdc1,0,0,SRCCOPY);
        dc.bitblt(100,100,15,15,&ftdc2,0,0,SRCCOPY);
    4 再将缓存区的图输出到屏幕上:
        pDC->bitblt(0,0,宽,高,&dc,0,0,SCRCCOPY);

    5 还没完呢,最后要重载一个函数:在view类中找到一个叫WM_ERASEBKGND的消息映射,添加函数,将返回值删除,干成TRUE就可以了。


还有一点注意的:这个双缓存技术主要就是靠dc,无论你的图有多么的复杂都必须全部都在dc中绘画出来,然后一次性覆盖到屏幕上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值