做了幾個遊戲發現每次刷屏時都會閃爍。這個問題怎麼解決呢?當然是雙快取技術最好,解決問題面也最廣!網上有很多雙快取技術的文章,可是很多說的不全。要你和我一樣用了雙快取技術卻還是閃屏,也許你直接看第五點就可以解決你的問題。
首先,簡單講一下雙快取技術(網上文章都會講,知道就跳過此段)。雙快取技術就是在記憶體區先畫乙個位圖,畫好後直接將這個圖乙個點乙個點覆蓋到螢幕上,這個過程非常快,所以不會出現閃屏。
下面結合例子講下步驟。比如要重畫兩個旗子和一張背景圖:
黑棋: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中繪畫出來,然後一次性覆蓋到螢幕上。
VC 雙快取技術 滾動條
vc中的繪圖有個比較棘手的問題是閃爍,雙快取是解決此類問題的一種方法,但是在系統繪圖中,由於可能要載入滾動條,響應滑鼠拖動等事件,導致傳統的雙快取方法不一定適用,本文提出了一種解決方法能夠用統一的框架內實現滾動條,滑鼠圖型拖動,視口轉換以及雙快取繪圖 關鍵字 雙快取,滾動條,滑鼠拖動,vc,視口轉換...
學習二十六 雙快取技術
在 react 中,dom 的更新採用可雙快取技術,雙快取技術致力於快速的 dom 更新。什麼是雙快取?舉個例子,使用 canvas 繪製動畫時,在繪製每一幀前都會清除上一幀的畫面,清除上一幀需要花費時間,如果當前幀畫面計算量又比較大,又需要花費比較長的時間,這就導致上一幀清除到下一幀顯示中間會有較...
VC使用雙快取技術,解決閃屏問題
第一次寫文章,有不對的地方請指正啊.雙快取 就是在記憶體中準備一塊區域,把要顯示的點陣圖都載入到記憶體中,然後呼叫bitblt函式,把記憶體裝置複製到顯示裝置上,這樣就可以防止閃屏了.下面是在vc中,實現的步驟.1 新建一單文件mfc程式,取名為test1.2在ctest1view中新增兩個成員函式...