遊戲引擎的結構很多,不過基本上都是在乙個遊戲主迴圈內實現。程式裡面的主迴圈包含了程式框架的最主要的結構體。
j2me
的程式一般都包含兩個
class
檔案,乙個是
midlet,
乙個是displayable
。一般我都是把遊戲的主要**放在
displayable
這個類裡面。這個類是基於事件驅動的程式,有三個主要相應函式
void paint(graphics g),void keypressed(int keycode),void keyreleased(int keycode)。
1.使用runnable和建立執行緒的主迴圈
一般主體的做法就是讓
displayable
這個類實現
runnable
這個介面,然後在其建構函式中建立乙個執行緒,啟動其
run()函式,
而run
函式裡面就包含了遊戲的主迴圈。下面是我在仙劍裡面的片斷**。
public class gamemidlet extends midlet
display.setcurrent(displayable);}}
displayable.running = false;
}instance.notifydestroyed();
instance = null;}}
public class gamedisplayable extends fullcanvas implements runnable
public void run()
else
count++;
}lib.sleep(30);}}
其中關於控制主迴圈速度的**可以不要,但是
lib.sleep(30)
必須保留,因為在
nokia 60
的手機上,如果去除了
sleep(30),
那麼遊戲將無法切換回來。同時,在遊戲中任何乙個內部迴圈中,也必須加入
sleep(30)
這個等待,才能讓遊戲可以切換回來,至於為什麼這樣做,我暫時還不清楚。
30ms
是我測試過沒有問題的數值,可能比
30ms
還小的值也是沒有問題的。
同時,在
moto
的手機上,必須將遊戲的主迴圈放在乙個執行緒中,遊戲才能切換回來,不過可以不加上面說的
sleep(30)
延時。2.不使用執行緒的主迴圈辦法
這個辦法只能在
nokia
的平台上實現,而我只建議在
nokia 40
的平台上做,這樣不需要執行緒,道理上來說節約了一些記憶體,如果不是記憶體很緊張的機型,那麼最好還是使用上一種辦法。
遊戲的主迴圈放在
midlet
的class
裡面,具體做法如下:
public class gamemidlet extends midlet
running =true;
display.getdisplay(this).setcurrent(displayable);
while(running) else
count ++;}}
notifydestroyed();}}
running =false;
}running = false;
}running =false;}}
j2me遊戲引擎程式結構
2004 11 17 唐良遊戲引擎的結構很多,不過基本上都是在乙個遊戲主迴圈內實現。程式裡面的主迴圈包含了程式框架的最主要的結構體。j2me 的程式一般都包含兩個 class 檔案,乙個是 midlet,乙個是displayable 一般我都是把遊戲的主要 放在 displayable 這個類裡面。...
j2me程式優化技巧
1 少用字串連線,多用stringbuffer 2 盡量用固定大小的陣列代替使用vector 3 如果可以不使用新class就能實現功能,就不要增加新的class,因為每個class都有一定的記憶體開銷 4 使用有限的物件導向,因為純粹的oo往往意味著更多的虛方法,更多的層次關係,更多的class ...
J2ME 關於移動的主頁推送對J2ME程式的影響
中國移動於5月17日推出費用提示頁面,其實早在5月15日測試j2me程式的時候就發現已經有頁面推送了。5月15日早上照常測試我的j2me聯網程式發現在模擬器一切正常,但是到了真機上卻得不到正確的資料,後來發現是第一次鏈結得到的資料流正是移動推送的頁面資料。經過試驗,其實得到第乙個頁面不用管它,繼續重...