雙緩衝是電腦動畫傳統技術,也是 J2ME 遊戲必備。閃爍成因:畫面顯示同時程式又在修改畫面。解決之道:在記憶體劃分一塊後台緩衝區,所有繪圖操作在緩衝區完成,最後一次性繪製到真實螢幕。
實作四步驟:
Graphics bg 與 Image buf,按螢幕尺寸建立緩衝圖片 buf = Image.createImage(width, height),取得其 Graphics 物件 bg = buf.getGraphics()。drawImage、drawString 等)均在 bg 上進行。repaint() 通知系統喚起 paint() 更新真實螢幕(paint() 只能由系統調用,不可手動呼叫)。paint(Graphics g) 中將緩衝圖片 buf 畫到螢幕:g.drawImage(buf, 0, 0, Graphics.TOP | Graphics.LEFT)。雖步驟稍繁,效果顯著。後續顯示內容只需在 bg 上繪圖再呼叫 repaint() 即可。
同樣採用 stopFlag + while 死循環機制。testFun(String str) 在緩衝區畫白底矩形、繪製傳入字串、呼叫 repaint() 顯示,進入循環等待按鍵。keyPressed() 將旗標設為 false 解除循環。此法避免 IDE 斷點導致的死機與干擾,可在任意處(含循環中)放置多個斷點,按鍵即續行,極為方便。
圖1:斷點測試