J2ME雙緩衝技術

2021-08-30 06:03:17 字數 1970 閱讀 7825

雙緩衝主要是用來解決螢幕閃爍以及繪圖效率的問題,這裡介紹下midp裡面使用方法。

1、有乙個函式可以判斷裝置是否實現了雙緩衝:isdoublebuffered(),如果返回true,表示裝置自身實現了雙緩衝,理論上說我們就不用再自己設定了。不過為了安全第一,大家普遍認同的做法是,不管裝置有沒有實現,我們都自己設定乙個,反正多做沒有壞處。

2、自己實現雙緩衝**如下:

// initialize:

image bufferimage = null;

bufferimage=image.createimage(scrw,scrh);

//in paint:

public void paint(graphics g)//將bufferimage的graphics物件賦給g

g.setcolor(0x0); //設定背景色黑色

g.fillrect(0,0,scrw,scrh);//清除當前畫面,準備繪製新畫面

g.setcolor(0xffffff); //設定顏色為白色

g.drawstring("test double buffer",10,50,0);

if(g!=old){ //要是已經發生改變則將緩衝區一次性畫到螢幕上去

old.drawimage(bufferimage,0,0,graphics.left|graphics.top);

3、注意:某些bt的機器可能自己設定雙緩衝會出問題,比如速度慢。

目前已發現的有softbank 3gc的少數機型,所以遇到特殊問題時,可以考慮去掉自己設定的雙緩衝看看,反正手機硬體已經支援了。

主要解決因為畫面在顯示的同時,程式又在改變它,而纏身的畫面閃爍問題。解決方法是:在記憶體中開闢一片區域作為後台畫面,程式對它更新,修改完成後再顯示它,就是雙緩衝技術。

可以使用canvas類中的isdoublebuffer()方法判斷裝置是否有雙緩衝。(支援midp2.0的機器都有)使用可變圖象,可以很容易的用作螢幕外緩衝。將所有的繪製都放在可變圖象中,然後一次性將可變圖象繪製到螢幕上。

image img =image.createimage(「/要繪製的圖象名.png」);//建立乙個不可變圖象

image buffer = image.createimage(width,height);//建立乙個可變圖象作為繪製緩衝

剛剛建立的buffer初始始一片不透明的白色區域,無法直接在可變圖象中建立透明象素。在使用圖象時,一般都需要提取該圖象的graphics物件,以便對可變圖象進行修改。注意:只有可變圖象才可以呼叫getgraphics()這個函式,如果時不變圖象,呼叫這個方法會丟擲illegalstateexception異常。

graphics bg=buffer.getgraphics();//獲取緩衝的graphics 物件

bg.setcolor( 顏色值 );//緩衝區的顏色

bg.fillrect(0,0,width,height);//填充整個螢幕

bg.drawimage( img , width/2,height/2,g.vcenter|g.hcenter);

g.drawimage(buffer,0,0,g.top|g.left);將緩衝區的內容繪製到螢幕上

執行程式後,調整g.drawimage(buffer,0,0,g.top|g.left);中繪製的起始座標0,0位置,發現,緩衝區上繪製的「/要繪製的圖象名.png」該,雖然繪製時候是g.vcenter|g.hcenter 居中,但是現在就隨緩衝區移動,不在螢幕中心,而是緩衝圖象的中心。

總結:雙緩衝技術是定義乙個graphics 物件bg和乙個image物件buffer,按螢幕大小建立乙個緩衝物件賦給buffer的graphics的物件bg。在這裡 graphics物件可理解為緩衝的螢幕,image 物件可當作緩衝螢幕的。在bg(緩衝螢幕)上用draw方法等語句畫圖,相當於在緩衝螢幕上畫圖。最後在paint(graphics g)函式裡,將buffer(緩衝螢幕上的)畫到真實螢幕上。 如果想要在螢幕上顯示社那麼東西,只要畫在bg上,然後呼叫repaint()將其顯示出來即可。

j2me實現雙緩衝

j2me程式中,如果我們先前程式設定的螢幕大小為240x300,為了在240x320螢幕繪製時自適應居中我們可以使用雙緩衝來實現 gamescreen中 定義變數 public final static int screenw 240 程式原來的寬度 public final static int ...

J2ME中的記憶體洩漏 續1 雙緩衝

這篇文章主要是 j2 me中的 記憶體洩漏 文章的補充部分。這裡主要說一下使用 雙緩衝中容易產生的記憶體洩露現象 也許有人沒用過 雙緩衝,這裡做個簡單的介紹 雙緩衝就是在記憶體中開闢乙個新的空間,你可以在上面繪製,然後一起繪製到手機螢幕上。採用 雙緩衝最大的好處是可以提高繪製速度,缺點是消耗記憶體。...

J2ME 文字滾動

private int tipstringpos screen width 當前字串左邊的位置 private int tipstringspeed 2 字串移動速度 private static final int tipstr left 5 5 左邊消失繪製座標 private static f...