J2ME 2D小遊戲入門之控制飛機移動

2021-04-17 08:56:48 字數 2308 閱讀 2478

三、控制飛機的移動

實在是等不及了吧?加把勁,讓我們加入遊戲的主角飛機吧。

你可以將這個遊戲定位在動作遊戲,乙個動作遊戲需要不斷的從使用者端獲得輸入,基本上不間斷,所以plane需要不斷的改變位置。那麼這個基於楨的遊戲應該定在多少楨合適呢?這需要在手機中測試,在模擬器上,如果定在15-18楨左右,是比較合適的。聽csdn的幾位xd說有的遊戲僅僅定在12楨,所以不同的遊戲是不一定的。基本上動作遊戲對機子的要求是要高一點。我們的遊戲框架是線性的,即輸出顯示和接受輸入是在同乙個執行緒中,15楨以下的遊戲處理輸入會顯得比較苯,高於20楨如果處理器速度較慢,很容易出現輸入卡在緩衝區,處理不過來的情況。現階段盡量讓楨數降下來吧,你不能和pc上用dx程式設計時,統一30fps的情況相提並論。

在這個以控制精靈移動為主要內容的遊戲中,我們不封裝任何的遊戲事件,我們的程式可能有些稚嫩,沒關係,一步一步來吧。

1. 飛機

plane是乙個標準的plane。由三楨畫面組成,首先在ps中處理,讓其透明:

在建構函式中,我們加入對飛機的初始化物件語句:

image img=imagetools.getimage("/pic/myplaneframes.png");

plane=new gameobject(img,24,24);

在gameinit()中初始化狀態,位置居中:

plane.reset();

plane.moveto((screenwidth-plane.sprite.getwidth())/2,(screenheight-plane.sprite.getheight())/2);

在gamemain中加入:

plane.paint(g);

接下來,讓飛機在控制下移動,主要是在gamemain中加入輸入處理,如果飛機左移就更新畫面到飛機左傾的畫面,如果飛機右傾反之,沒有輸入的時候讓飛機處於正常。

if (gameover) else{

if (keyevent) {

if(key_up){

plane.move(0, -3);

plane.sprite.setframe(0);

if(key_down){

plane.move(0, 3);

plane.sprite.setframe(0);

if(key_left){

plane.move( -3, 0);

plane.sprite.setframe(1);

if(key_right){

plane.move(3, 0);

plane.sprite.setframe(2);

if(key_fire){

else {

plane.sprite.setframe(0);

2. 背景

讓飛機在海面飛行吧,我們用乙個藍色的背景代表海面,我們需要他鋪滿整個背景。我們使用tiledlayer來繪畫背景。

初始化:

img=imagetools.getimage("/pic/back_water.png");

int backcolumns=screenwidth/img.getwidth()+1;//計算橫向

int backrows=screenheight/img.getheight()+1;

background=new tiledlayer(backcolumns,backrows,img,img.getwidth(),img.getheight());

int x,y;

for (int i = 0; i < backcolumns*backrows; i++) {

x=i%backcolumns;

y=i/backcolumns;

system.out.println("x="+x+" y="+y);

background.setcell(x,y,1);

接下來在gamemain中加入繪製語句。

background.paint(g);//draw background

注意,要保證背景的繪製在飛機的繪畫之前。如果使用layermanager可以很方便的的控制繪製層,但是我們的接下來的子彈要求多個子彈物件共用乙個sprite的影象,但是layermanager繪畫的時候以layer為單位,由layermanager幫助我們呼叫各個layer的paint,so一次只支援將乙個sprite畫在乙個地方,所以我覺得layermanager有些雞肋。一般時候我們還是自己paint吧。當然,層是乙個很重要的概念,利用層,螢幕校準將非常方便,震動整個螢幕等特效將很實現。也許你有個好法,可以讓我不在layermanager層與sprite狀態物件組之間矛盾…

可喜可賀呀,我們的飛機動起來了,哈哈,讓我們期待加入子彈吧,那是本遊戲的「精華」。

J2ME 2D小遊戲入門之遊戲的框架

一 遊戲的框架 我們的遊戲需要乙個通用的遊戲框架,也方便以後的開發,但實現乙個引擎是複雜的。作為初學者如果要你考慮太多的問題,恐怕會讓你偏離主線,這裡只給出canvas的 不理解可以參看本站的另外一篇系列文章 使用midp2.0開發遊戲 public class mygamecanvas exten...

J2ME遊戲開發學習之遊戲開發應用的幾個核心技術

在j2me手機遊戲開發中,會根據不同的遊戲使用不同的技術,但有些技術是比較核心的,會在幾乎任何j2me手機遊戲中用到的,下面我列舉幾個我認為比較核心的技術。1.低階使用者介面開發。主要是canvas類和graphics類的應用,這是在遊戲底層開發中需要用到的,也是最基礎的技術。另外,高階使用者介面的...

J2ME 3D基本地形渲染之HightMap

高度圖實際上就是乙個2d陣列。地形實際上就是一系列高度不同的網格而已,這樣陣列中每個元素的索引值剛好可以用來定位不同的網格 x,y 而鎖儲存的值就是網格的高度 z 要將高度地圖轉換為場景,只需要讀取的畫素,然後根據畫素的值設定平面的高度,最常用的平面是四邊形,因為四邊形是規則的,可以採用陣列方便統一...