程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> 關於j2me game雙緩沖實現探討

關於j2me game雙緩沖實現探討

編輯:J2EE

雙緩沖技術的應用很廣泛,設計游戲的時候更是需要它。 在midp1.0中,api中並沒有game這個包,看到網上很多人在討論設計游戲的時候會出現圖片斷裂,屏幕閃爍等問題。

我經過這幾天的學習整理下自己的學習心得,用來拋磚,希望對此有研究高手們相互討論。讓我也學習學習。

雙緩沖的原理可以這樣形象的理解:把電腦屏幕看作一塊黑板。首先我們在內存環境中建立一個“虛擬“的黑板,然後在這塊黑板上繪制復雜的圖形,等圖形全部繪制完畢的時候,再一次性的把內存中繪制好的圖形“拷貝”到另一塊黑板(屏幕)上。采取這種方法可以提高繪圖速度,極大的改善繪圖效果。

對於手機來說。具體的過程就是通過extends Canvas。然後獲取bufferImage。再然後就getGraphics。最後就是在這個graphics中繪制圖片等,再最後就是把這個繪制好的bufferImage繪制的屏幕上。

說歸說。具體還是要看代碼的。裡面的代碼參照了一些開源的代碼。

Java 代碼

package org.wuhua.game;

import Javax.microedition.lcdui.Canvas;

import Javax.microedition.lcdui.Graphics;

import Javax.microedition.lcdui.Image;

/**

* 類名:GameCanvas.Java

編寫日期: 2006-11-29

程序功能描述:

* 實現雙緩沖的Game畫布。實現原理是創建一個BufferImage。然後繪制,最後顯示出來。就這麼簡單。

Demo:

Bug:

*

*

* 程序變更日期 :

變更作者 :

變更說明 :

*

* @author wuhua

*/

public abstract class GameCanvas extends Canvas {

/**

* 繪制緩沖的圖片。用戶繪制資源的時候都是操作這個圖片來進行的

*/

private Image bufferImage;

private int height;

private int width;

private int clipX, clipY, clipWidth, clipHeight;

private boolean setClip;

protected GameCanvas() {

super();

width = getWidth();

height = getHeight();

this.bufferImage = Image.createImage(width, height);

}

protected void paint(Graphics g) {

//如果要求繪制指定區域的話就需要這樣了

if (this.setClip) {

g.clipRect(this.clipX, this.clipY, this.clipWidth, this.clipHeight);

this.setClip = false;

}

g.drawImage(this.bufferImage, 0, 0, Graphics.TOP | Graphics.LEFT);

}

public void flushGraphics(int x, int y, int width, int height) {

this.setClip = true;

this.clipX = x;

this.clipY = y;

this.clipWidth = width;

this.clipHeight = height;

repaint();

serviceRepaints();

}

public void flushGraphics() {

repaint();

serviceRepaints();

}

/**

* 設計者主要是通過調用這個方法獲取圖片。然後就可以繪制了

* @return

*/

protected Graphics getGraphics() {

return this.bufferImage.getGraphics();

}

/**

* 這個方法主要是處理Nokia平台,用戶調用setFullScreenMode(boolean enable) 時重新按照新的w & h創建緩沖圖片

*/

protected final void sizeChanged(int w, int h) {

if (h > height) {

this.bufferImage = Image.createImage(w, h);

}

}

}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved