在創建動畫引擎,我們已經看到了不良的刷新屏幕閃爍現象. 這種效果是由於消去圖像,並產生新的更新所需的時間, 有生命的物體的結果.
一種技術來避免這就是所謂的 雙緩衝或 “ðoublebuffered“, 所以我們用兩個圖像 (顯存) 同時. 雖然在圖紙上, 我們看到對方,並最大限度地減少圖像閃爍消除之間的轉換時間.
在 計算機, 多個緩衝存儲器是利用一個以上的緩衝器保持的數據塊, 使得 “讀者” 你會看到一個完整版本的數據, 代替數據是由一個創建的局部更新版本 “作家”. 它也可以用來避免需要使用雙端口RAM, 當讀者和作家是不同的設備。(該)
我們修改類 “黑板” 我們已經修改以納入 動畫引擎 實現這種技術. 我們需要知道在圖形顯示足夠存儲器的尺寸來存儲, 和定義對象 “圖像” 這將是這將繪製圖形.
尺寸d; 私人 圖片mImage = NULL;
該方法 “油漆” 繪圖拿到第一張圖像的大小產生. 函數調用 “checkOffScreenImage()” 將負責確保對象 “mImage” 借鑒.
為了繪製這個對象請求您的圖形方向 與功能 “的getGraphics“. 然後,它會填充顏色為底色,我們使用這個元素繪製填充矩形.
我們呼籲程序繪製圖像, 我們已經在功能執行 “paintOffScreen” 通過這個圖形對象作為參數來使用它作為一個畫布.
最後一個函數將繪製屏幕或生成的畫布圖像.
市民同步無效 油漆(圖形克) { D =的getSize(); checkOffScreenImage(); 圖形offG = mImage.getGraphics(); offG.setColor(的getBackground()); offG.fillRect(0, 0, 為d.width, 為d.height); paintOffScreen(mImage.getGraphics()); g.drawImage(mImage, 0, 0, 空值); }
性能 “checkOffScreenImage()” 他將監督如果更改用於顯示的圖形信息,並產生一個對象的窗口的大小在其上繪製, 由功能 “的createImage()“
私人無效 checkOffScreenImage() { 尺寸D =的getSize(); 如果 (為d.width == 0 || 為d.height == 0) { 返回; } 如果 (mImage == NULL || mImage.getWidth(空值) !=為d.width || mImage.getHeight(空值) !=為d.height) { mImage =的createImage(為d.width, 為d.height); } }
性能 “疼痛花花公子CREE” 是舊的函數或方法 “油漆” 這引起了我們的圖形對象, 所以你不值得補充意見. 我們乾脆改名.
公共無效 paintOffScreen(圖形克){ 枚舉枚舉= bd.elements(); 對象ob; 而(enum.hasMoreElements()){ OB = enum.nextElement(); 如果(OB的instanceof SimpleDrawable){ ((SimpleDrawable) 是否).油漆(克); } } }
當你運行應用程序,您將看到的圖像閃爍消失.
一定是 連接的 發表評論.