遊戲中的開頭一般都需要使用閃屏(Splash Screen)來顯示開發商的相關資訊或者遊戲的背景等,所以一般情況下遊戲中的閃屏都多於一個,有兩個甚至更多,例如百寶箱中的遊戲中移動已經規定第一個閃屏必須是移動夢網的Logo,而第二個要出現百寶箱的logo。實現閃屏的方式有很多種,最合理的方式應該還是使用Canvas,因為閃屏過後的菜單或和遊戲主介面也是在Canvas或者GameCanvas上繪製,所以可以實現平滑的切換。
下面的代碼給出了利用Canvas實現兩個Splash Screen的方式,當然如果願意的話,我們還可以在其中加入一些特效:
/*
* HenCanvas.java
*
* Created on 2006年7月25日, 下午4:42
*
*/
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
/**
*
* @author mydeman
*/
public class HenCanvas extends Canvas implements Runnable{
Image img1;
Image img2;
//splah的頁面索引
int splash_index = 0;
//每次迴圈的時間間隔
private static final int INTERVAL = 100;
public HenCanvas() {
try {
img2 = Image.createImage("/image2.png");
} catch(Exception e) {}
//設定全螢幕模式
setFullScreenMode(true);
//啟動線程
Thread t = new Thread(this);
t.start();
}
/**
* 繪製方法
*/
protected void paint(Graphics g) {
switch(splash_index) {
//繪製第一個閃屏
case 0 :
g.setColor(255, 255, 255);
g.fillRect(0, 0, 240, 320);
g.drawImage(img2, 120, 160, Graphics.HCENTER|Graphics.VCENTER);
break;
//繪製第二個閃屏
case 1 :
g.setColor(255, 255, 255);
g.fillRect(0, 0, 240, 320);
g.drawImage(img1, 120, 160, Graphics.HCENTER|Graphics.VCENTER);
break;
}
}
/**
* 運行
*/
public void run() {
long curtime = 0;
//得到剛開始啟動並執行時間
long oldtime = System.currentTimeMillis();
while(true) {
//獲得目前時間
curtime = System.currentTimeMillis();
switch(splash_index) {
case 0 :
//如果在第一個頁面停留了兩秒則開始顯示第二個頁面
if(curtime > oldtime + INTERVAL * 20) {
img2 = null;
System.gc();
splash_index = 1;
try {
img1 = Image.createImage("/image1.png");
} catch(Exception e) {}
//重新整理螢幕
refresh();
}
break;
}
}
}
/**
* 重新整理螢幕
*/
private final void refresh() {
repaint();
serviceRepaints();
}
}