首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

解決 J2ME 全螢幕模式相容性問題

     編輯:J2ME

J2ME 遊戲全螢幕模式相容性解決方案

雖然 MIDP 2.0 標準提供 setFullScreenMode(true),但實際測試發現許多機型 (S60、S40、MOTO、SoftBank 3GC 等) 呼叫後 getWidth()/getHeight() 仍回傳非全螢幕尺寸。本文提供通用解決策略。

核心解決思路

  1. 利用系統回呼 sizeChanged(int w, int h) 取得真實螢幕尺寸。
  2. 在 Canvas 建構子中先呼叫 setFullScreenMode(true),再延遲極短時間 (如 100ms) 後讀取尺寸,確保視窗狀態已更新。
  3. 封裝 updateScreen() 多重調用,兼容不同機型行為。

完整程式碼範例

class MyCanvas extends Canvas implements Runnable {
    static int scrW = 0;
    static int scrH = 0;

    public MyCanvas() {
        System.out.println(System.getProperty("microedition.platform"));
        setFullScreenMode(true);
        try { Thread.sleep(100); } catch (Exception e) {} // 保險延遲
        updateScreen(getWidth(), getHeight());
        new Thread(this).start();
    }

    // 系統自動回呼:全螢幕模式切換完成後觸發
    protected void sizeChanged(int w, int h) {
        updateScreen(w, h);
    }

    public void updateScreen(int _w, int _h) {
        scrW = _w;
        // 僅當高度增大時更新,避免重複處理
        if (_h > scrH) {
            scrH = _h;
        } else {
            return;
        }
        // 若使用雙緩衝,在此重建 bufferImage
        // if (useDoubleBuffer) bufferImage = Image.createImage(scrW, scrH);
    }

    public void run() {
        // 執行緒中再次嘗試更新,雙重保險
        updateScreen(getWidth(), getHeight());
    }

    public void paint(Graphics g) {
        // 繪圖邏輯
    }
}

關鍵點說明

  • Thread.sleep(100) 非絕對必要,若特定機型仍失效可嘗試增加至 1000ms。
  • updateScreen 判斷 _h > scrH 防止多次回呼導致閃爍或邏輯錯誤。
  • 此模式經測試適用於國內主流機型 (S60、S40、MOTO、SoftBank 3GC)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved