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

J2ME 手機遊戲引擎程式結構簡析:主迴圈與事件驅動

     編輯:J2ME

J2ME 遊戲引擎核心圍繞「主迴圈」運轉,通常包含 MIDlet 與 Displayable 兩類別。本文對比「有執行緒」與「無執行緒」兩種主迴圈架構,並說明跨平台相容性關鍵點。

架構一:Runnable + 獨立執行緒(推薦,跨平台)

  • GameDisplayable extends Canvas implements Runnable
  • 建構子啟動 Thread(this).start()
  • run() 內以 System.currentTimeMillis() 控制幀率,呼叫 Game_Process() 更新邏輯,最後 repaint() 觸發渲染
  • 關鍵:迴圈中必須 Thread.sleep(30),否則 Nokia S60 無法切回前台;Moto 機型需執行緒否則無法切回
public void run() {
    while (running) {
        long now = System.currentTimeMillis();
        if (now - timeOld >= interval) {
            timeOld = now;
            Game_Process(); // 邏輯更新
            repaint();      // 觸發 paint()
        }
        try { Thread.sleep(30); } catch (Exception e) {}
    }
}

架構二:無執行緒,主迴圈寫在 MIDlet.startApp()(僅限 Nokia S40)

  • 省去 Thread 物件,節省少量記憶體
  • 在 startApp() 中 while(running) { ... } 直接跑迴圈
  • 缺點:阻塞系統事件佇列,S60、Moto 等平台會失去響應,僅建議極度記憶體受限的 S40 專案使用

事件處理

Canvas 三大回調:

  • paint(Graphics g):渲染
  • keyPressed(int keyCode) / keyReleased(int keyCode):按鍵輸入
  • MIDP 2.0 GameCanvas 另提供 getKeyStates() 輪詢式輸入

建議採用架構一,配合 GameCanvas(MIDP 2.0)獲得最佳跨平台穩定性與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved