鳥哥,射擊遊戲技術分享3

參見遊戲圖片和視頻

四、背景滾動

 首先背景圖片做得可以上下連接(上下滾動),就是畫一張圖片,下面接着畫,或者上面接着畫,看起來都是無縫的。然後程序上的處理:計一個變量go值,每楨go += add;add爲滾動速度(向上爲負值,向下爲正值)程序上爲向下滾動,這樣看起來人就在前進了

go += add;
 int heights = 0;
 int drawY = 0; 
heights = one.getHeight();//圖片高度 
drawY = (go >> 2) % one.getHeight();//之前是還有云層什麼的, //最底下>>2,第二層>>1的,以控制各層不同速度。後來因爲內存不夠用,砍層了,>>2就一直沒變 
if(drawY - Datas.height < 0)//Datas.height爲屏幕高度,如果發現起始畫點在屏幕中,則多畫一張 
{//達到遮蓋目的 
g.drawImage(one, 0, drawY, 20);//one是圖片Image對象,xy座標,20是anchor,鳥哥發現有好些人不是用20,用0的 //經過測試發現0與20其實結果是一樣的 
}
 g.drawImage(one, 0, drawY - heights, 20); 

 

五、怪物生成

有些遊戲根據座標,有些遊戲根據時間,有些寫死,有些隨機。本遊戲根據時間。

爲了確保效果,做了個簡單的怪物編輯器,由策劃自己編輯:

座標編輯:

兩者結合,策劃方便地看到怪運動軌跡。第幾秒出現什麼線路的怪,啥等級的。都有明確顯示。

編輯器上一些描述:

public static String[][][] traces =
    {
         {//蝙蝠:
              {//從上向下飛
                  "飛行速度a1,到達屏幕上方1/4的時候,發射一顆瞄準子彈,子彈速度b1",
                  "飛行速度a2,到達屏幕上方1/4的時候,發射一顆瞄準子彈,子彈速度b2",
                  "飛行速度a1,到達屏幕上方1/4的時候,發射三顆散彈,子彈速度c1",
                  "飛行速度a2,到達屏幕上方1/4的時候,發射三顆散彈,子彈速度c1"},
              {//路線2:...},
              {//路線3:拋物線(從右到左)
              ....
                 },
              {//路線4:飛向屏幕(120,240)這一點,速度較快
                  "無子彈",
                  "剛出屏幕的時候發射一顆瞄準彈(瞄準主角),速度要比自身快"
              }
        }
        ,
        {//刺客:
            ...
        },
        ............
    };

    public static String[][] tracesDescription =
    {
         {//蝙蝠:
              "從上向下飛",
              "路線3:拋物線(從左到右)",
              "路線3:拋物線(從右到左)",
              "路線4:飛向屏幕(120,240)這一點,速度較快"
        },
        {//刺客:
            ...
        },
        {//槍手:
        ...........
        {//將軍:
            "路線1:從上往下,到屏幕四分之一出停留一段時間,發彈,離開"
        },
        {//巨獸:
            "路線1:從上往下"
        }
    };

看看這些ai描述,大部分是以屏幕或者時間爲參考的,這樣,移植不同屏幕的機型時就不用修改了。 

用netbeans開發,很快拉出來兩個界面。

 

95;311w-W,h+H//95:第幾秒出現;3:怪的id;1:怪的等級;1:怪的線路.最後爲出現座標
94;001w>1+W,-H
94;001w>1-W,-H
93;001w>1,-H-H
93;001w>1-W,-H
93;001w>1+W,-H
90;131w+W,H
86;101-W,-H
86;111w+W,-H
86;211-W,H
84;001w>1+W,-H
84;001w>1-W,-H
83;201w>1,-H
80;301W,h+H
80;131w+W,H
80;201w>1-W-W,-H
80;201w>1+W+W,-H
78;001w>1,-H-H
78;001w>1-W,-H
78;001w>1+W,-H
76;211-W,H
75;401w>1-W,-H
75;401w>1+W,-H
74;001w>1+W,-H
74;001w>1-W,-H
74;311w-W,h+H
70;131w+W,H
70;501w>1,-H
68;201w>1,-H
66;101-W,-H
66;111w+W,-H
66;211-W,H
64;001w>1+W,-H
64;001w>1-W,-H
63;301W,h+H
63;001w>1,-H-H
63;001w>1-W,-H
63;001w>1+W,-H
60;131w+W,H
56;121-W,H
54;001w>1+W,-H
54;001w>1-W,-H
53;201w>1,-H
53;311w-W,h+H
50;131w+W,H
50;401w>1-W,-H
50;401w>1+W,-H
48;001w>1,-H-H
48;001w>1-W,-H
48;001w>1+W,-H
46;101-W,-H
46;111w+W,-H
46;301W,h+H
46;121-W,H
44;001w>1+W,-H
44;001w>1-W,-H
40;201w>1-W-W,-H
40;201w>1+W+W,-H
38;201w>1,-H
36;121-W,H
35;501w>1,-H
34;001w>1+W,-H
34;001w>1-W,-H
33;001w>1,-H-H
33;011-W,-H
33;021w+W,-H
32;311w-W,h+H
30;131w+W,H
28;002w>1,-H
26;101-W-W,-H
26;111w+W+W,-H
26;121-W,H
25;401w>1,-H
24;201w>1+W+W,-H
24;201w>1-W-W,-H
23;201w>1,-H
20;131w+W,H
18;002w>1,-H-H
18;021w+W,-H
18;011-W,-H
14;001w>1+W,-H
14;001w>1-W,-H
12;301W,h+H
11;311w-W,h+H
10;131w+W,H
8;321w>1,-H
6;101-W-W,-H
6;111w+W+W,-H
4;111w+W+W,-H
4;101-W-W,-H
3;201w>1,-H-H
3;001w>1-W,-H
3;001w>1+W,-H

 

  w,h爲手機屏幕寬高,W,H爲怪身體的寬高。>1表示向右移等。遊戲會解析這些座標值,得到具體座標數據。

 它們都是以屏幕,或者自己做參考,這樣不同手機屏幕移植一樣有好處。

六、切圖介紹

爲了提高速度,遊戲中的畫圖全部沒有用到旋轉,翻轉。遊戲本身決定。切圖也沒有用動編了。如下圖:

美術給出對應的座標,用drawRegion搞定:

也沒什麼人氣,javaeye裏j2me關注度本身就小。技術分享就到這裏吧。鳥哥,感謝有關注的網友!

 

發佈了28 篇原創文章 · 獲贊 1 · 訪問量 3214
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章