JetBoy遊戲研究

2021-09-06 06:41:06 字數 4449 閱讀 6278

jet 噴氣式(飛機)

1. 在androidmanifest.xml檔案中

// 設定menifest的package屬性

package="com.example.android.jetboy"

android:theme="@android:style/theme.notitlebar"

// activity(.jetboy)的螢幕方向設定為水平方向

android:screenorientation="landscape"

2. 在jetboy.oncreate方法中

// 獲取jet檢視和jet執行緒

// private jetboyview mjetboyview;

mjetboyview = (jetboyview)findviewbyid(r.id.jetboyview);

// private jetboythread mjetboythread;

mjetboythread = mjetboyview.getthread();

// 獲取main布局中定義的其他檢視

(略)3. 在res/layout/main.xml檔案中

// 使用framelayout布局

// 新增jetboyview檢視

// 新增「幫助」文字檢視 設定為不可見

// 新增「開始」按鈕

// 新增「重新開始」按鈕 設定為不可見

// 新增「時間」文字檢視 設定為不可見

4. 在jetboyview中

jetboyview繼承su***ceview 實現su***ceholder.callback

5. 在jetboyview.gameevent的構造方法中

// 記錄下當前時間

// long eventtime;

eventtime = system.currenttimemillis();

6. 在jetboyview.keygameevent中

keygameevent繼承gameevent

// 定義變數keycode, msg, up; 在構造方法中初始化

public int keycode;

public keyevent msg;

public boolean up;

7. 在jetboyview.jetgameevent中

jetgameevent繼承gameevent

// 定義變數player, segment, track, channel, controller, value; 在構造方法中初始化

public jetplayer player;

public short segment;

public byte track;

public byte channel;

public byte controller;

public byte value;

8. 在jetboyview.jetboyview方法中

// 獲取su***ceholder 新增callback監聽物件

su***ceholder holder = getholder();

holder.addcallback(this);

// 建立jetboythread物件 傳遞su***ceholder物件, context物件, handler物件

thread = new jetboythread(holder, context, new handler() {

// 設定focusable屬性為true

setfocusable(true);

9. 在(new)handler物件的handlemessage(message m)方法中

// 獲取時間 顯示在時間文字檢視上

mtimerview.settext(m.getdata().getstring("text"));

// 如果m.getdata().getstring("state_lose")不為空

// 「重試」按鈕可見 「時間」標籤不可見 「幫助」標籤可見

// 如果mhittotal大於等於50 提示win

10. 在jetboyview的重寫方法onwindowfocuschanged(boolean haswindowfocus)中

如果haswindowfocus為true時 呼叫thread.pause();

11. 在jetboyview中實現的3個抽象方法

su***cechanged(su***ceholder holder, int format, int width, int height)

su***cecreated(su***ceholder holder)

su***cedestroyed(su***ceholder holder)

12. 在jetboyview.su***cechanged方法中

thread.setsu***cesize(width, height);

13. 在jetboyview.su***cecreated方法中

thread.setrunning(true);

thread.start();

14. jetboyview.su***cedestroyed方法中

boolean retry = true;

thread.setrunning(false);

每次retry為true時

thread.join();

retry = false;

15. 在jetthread中

// android.media.jetplayer.onjeteventlistener

jetthread繼承thread 實現onjeteventlistener

// 定義5種狀態

public static final int state_start = -1;

public static final int state_play = 0;

public static final int state_lose = 1;

public static final int state_pause = 2;

public static final int state_running = 3;

16. 在onjeteventlistener中宣告4個抽象方法 需要被實現

onjetevent(jetplayer player, short segment, byte track, byte channel, byte controller, byte value)

onjetuseridupdate(jetplayer player, int userid, int repeatcount)

onjetnumqueuedsegmentupdate(jetplayer player, int nbsegments)

onjetpauseupdate(jetplayer player, int paused)

17. 在jetthread構造方法jetboythread(su***ceholder, context, handler)中

// 獲取

mtitlebg = bitmapfactory.decoderesource(mres, r.drawable.title_hori);

18. 在jetthread.initializejetplayer()方法中

// private jetplayer mjet = null;

mjet = jetplayer.getjetplayer();

// 設定onjeteventlistener監聽物件

mjet.seteventlistener(this);

// 載入jet檔案

mjet.loadjetfile(mcontext.getresources().openrawresourcefd(r.raw.level1));

// 其他

mjet.queuejetsegment(0, 0, 0, 0, 0, ssegmentid);

mjet.queuejetsegment(1, 0, 4, 0, 0, ssegmentid);

mjet.queuejetsegment(1, 0, 4, 1, 0, ssegmentid);

mjet.setmutearray(mutemask[0], true);

19. 在jetthread.dodraw(canvas)方法中

// 如果mstate等於running

dodrawrunning(canvas);

// 如果mstate等於start

dodrawready(canvas);

// 如果mstate等於play或lose

mtitlebg2 = bitmapfactory.decoderesource(mres, r.drawable.title_bg_hori);

dodrawplay(canvas);

JetBoy遊戲深入解析(上) 框架分析

先介紹遊戲介面的組成 asteroid 小行星,隕石 ship 飛船 beam 雷射束 其他的都是背景。這個遊戲如何玩了?通過中間按鈕來控制飛船發射雷射,擊中隕石得分,飛船的位置與當前最新的隕石保證水平。如何切換遊戲介面的橫豎?這個相信每個開發人員應該知道吧 ctrl f12 主要類如下 主要類功能...

JetBoy遊戲深入解析(上) 框架分析

先介紹遊戲介面的組成 asteroid 小行星,隕石 ship 飛船 beam 雷射束 其他的都是背景。這個遊戲如何玩了?通過中間按鈕來控制飛船發射雷射,擊中隕石得分,飛船的位置與當前最新的隕石保證水平。如何切換遊戲介面的橫豎?這個相信每個開發人員應該知道吧 ctrl f12 主要類如下 主要類功能...

嚴肅遊戲的應用研究

一 嚴肅遊戲 serious games 這是乙個比較新的概念,在2004年由美國首先提出了這個概念。在2004年以及2005年 嚴肅遊戲峰會 serious games summit 裡,參與會議的大多數人對嚴肅遊戲的概念的定義是 1 遠超越傳統遊戲市場的互動科技應用,包括人員訓練 政策 分析 視...