在 J2ME 遊戲開發中,歡迎界面(Splash Screen)是玩家進入遊戲的第一印象。一個設計良好的歡迎界面不僅能展示遊戲品牌,還能在資源載入期間提供視覺緩衝。本文將系統介紹兩種主流的歡迎界面實現模式,並提供完整原始碼供參考。
此模式將控制權完全交給玩家,適合需要玩家確認準備就緒的遊戲類型。實現關鍵在於重寫 Canvas 的 keyPressed() 方法,偵測任意按鍵事件後立即切換至主選單。
import javax.microedition.lcdui.*;
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) {
showErrorAlert("資源文件不存在!");
}
}
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 showErrorAlert(String msg) {
Alert alert = new Alert("錯誤", msg, null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
此模式無需玩家操作,經過設定時間(通常 3-5 秒)自動進入主選單,適合品牌展示型遊戲。核心在於實作 Runnable 介面,於獨立執行緒中處理倒計時邏輯。
import javax.microedition.lcdui.*;
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) {
showErrorAlert("資源文件不存在!");
return;
}
new Thread(this).start(); // 啟動倒計時執行緒
}
protected void paint(Graphics g) {
if (bgImage != null) {
g.drawImage(bgImage, 0, 0, Graphics.TOP | Graphics.LEFT);
}
}
public void run() {
try {
Thread.sleep(5000); // 等待 5 秒
} catch (InterruptedException ignored) {}
display.setCurrent(new MainList());
}
private void showErrorAlert(String msg) {
Alert alert = new Alert("錯誤", msg, null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
}
try-catch 包裹 Image.createImage(),防止資源遺失導致程式崩潰。MIDlet 的 pauseApp() 中處理歡迎界面的狀態保存。實際專案中可結合兩種模式:顯示「按任意鍵跳過」提示,同時啟動倒計時執行緒。若玩家按鍵則立即跳轉並中斷執行緒;若倒計時結束則自動跳轉。這樣既保證品牌曝光時間,又尊重玩家操作習慣。