歡迎界面 (Splash Screen) 是 J2ME 遊戲的門面,通常顯示 Logo、載入進度或品牌資訊。本文介紹兩種經典實現模式:**任意鍵進入**與**定時自動跳轉**,並提供完整 Canvas 實現代碼。
最簡單、用戶掌控感最強的方式。核心邏輯:keyPressed() 直接切換 Displayable。
public class WelcomeCanvas extends Canvas {
private Image bgImage;
private Display display;
public WelcomeCanvas(Display display) {
this.display = display;
try {
bgImage = Image.createImage("/res/welcome.png");
} catch (Exception e) {
showError("資源文件不存在!");
}
}
protected void paint(Graphics g) {
if (bgImage != null)
g.drawImage(bgImage, 0, 0, Graphics.TOP | Graphics.LEFT);
}
protected void keyPressed(int keyCode) {
// 任意鍵切換至主選單
display.setCurrent(new MainList());
}
private void showError(String msg) {
Alert a = new Alert("錯誤", msg, null, AlertType.ERROR);
a.setTimeout(Alert.FOREVER);
display.setCurrent(a);
}
}
實現 Runnable,啟動執行緒睡眠指定時間 (建議 3~5 秒),時間到自動切換。適合展示品牌動畫或預載資源。
public class WelcomeCanvas extends Canvas implements Runnable {
private Image bgImage;
private Display display;
public WelcomeCanvas(Display display) {
this.display = display;
try { bgImage = Image.createImage("/res/welcome.png"); }
catch (Exception e) { showError("資源文件不存在!"); }
new Thread(this).start(); // 啟動定時執行緒
}
protected void paint(Graphics g) {
if (bgImage != null)
g.drawImage(bgImage, 0, 0, Graphics.TOP | Graphics.LEFT);
// 此處可額外繪製進度條、旋轉 Logo 等動畫
}
public void run() {
try { Thread.sleep(5000); } // 等待 5 秒
catch (InterruptedException e) {}
// 時間到,切換主介面
display.setCurrent(new MainList());
}
private void showError(String msg) { ... }
}
keyPressed() 立即跳轉,兼顧不耐煩玩家run() 中循環 repaint() + sleep(帧間隔) 播放幀動畫,時間到再跳轉setFullScreenMode(true) 隱藏標題欄/軟鍵提示res/ 目錄,JAD/MANIFEST 中 MIDlet-Jar-URL 對應 JAR 內部路徑Image.createImage("/res/welcome.png") 開頭斜槓表示 JAR 根目錄歡迎界面雖小,體現遊戲專業度。任意鍵模式代碼最少、適合輕量級應用;定時模式配合預載資源、品牌動畫,體驗更佳。實際開發建議採用「定時+可跳過+背景預載」混合模式,兼顧展示效果與用戶自主權。