實現游戲中的文字滾屏功能一文中講述了如何實現文字滾屏功能,在本文中我們將實現圖片滾動的功能,其實現的原理是相似的,只不過圖片的相對復雜一些。
首先我們應該預備一個大小適當的圖片,目的是實現讓他從屏幕底部滾動到屏幕的中間。這樣的情況比較簡單,我們不需要考慮雙緩沖的問題。有的時候我們需要自己繪畫圖片,可能算發揮比較復雜,這時候就需要考慮雙緩沖問題,為了得到更好的效果,避免閃屏,我們應該在后臺畫圖然后把它copy到當前屏幕的適當位置,因為copy的速度是比你直接在當前屏幕畫的速度快的。在Canvas類中提供了一個函數isDoubleBuffered(),假如返回true的話,那么表示設備支持雙緩沖,那么我們就沒有必要自己實現這個技術了。假如返回false那么我們就應該使用雙緩沖技術。你可以參考應用雙緩沖技術解決畫面閃爍的問題 。
為了簡單我們使用一個圖片代替我們自己畫的工作,這樣我們沒有使用雙緩沖的可能了,因為只有通過指定width和height的空的圖片才是可以修改的。像從jar文件中讀取、從子節數組中創建的圖片都是不可修改的。
下面是源代碼
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class GuessNumber extends MIDlet
{
PRivate Display display;
private WelcomeCanvas welcomeCanvas;
private Form mainForm;
protected void startApp() throws MIDletStateChangeException
{
initMIDlet();
}
private void initMIDlet()
{
display = Display.getDisplay(this);
mainForm = new Form("Guess Number");
mainForm.append("this is a game");
welcomeCanvas = new WelcomeCanvas(display,mainForm);
display.setCurrent(welcomeCanvas);
}
protected void pauseApp()
{
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
}
public class WelcomeCanvas extends Canvas
{
private Display display;
private Displayable next;
private Timer timer = new Timer();
private int width = getWidth();
private int height = getHeight();
private int i = height;
private int left;
private int incHeight;
private Image image;
private boolean going = true;
新聞熱點
疑難解答