160 likes | 266 Views
藍芽手機遊戲連線同步之實作. 指導教授 : 壽大衛 專題組員 : 陳道生 余宗勳. 專題分工. 資料蒐集 : 陳道生、余宗勳 遊戲策劃 : 陳道生 碰撞觸發判斷 : 陳道生 藍芽資料傳輸 : 余宗勳 遊戲結束判斷 : 陳道生 、余宗勳 遊戲美工 : 陳道生. 研究動機. 藍芽是一種低成本、低功率的無線連接技術,在電腦週邊、手機週邊也有許多利用藍芽傳輸達到無線通訊的產品。藍芽傳輸訊息是免費,故其遊戲性非常高,從線上遊戲的推出以來受到廣大民眾的熱烈反應,這顯示單機版的遊戲已不再具有吸引力,故以藍芽微平台進行手機對戰的時代已經來臨。
E N D
藍芽手機遊戲連線同步之實作 指導教授:壽大衛 專題組員 : 陳道生 余宗勳
專題分工 資料蒐集 : 陳道生、余宗勳 遊戲策劃 : 陳道生 碰撞觸發判斷 : 陳道生 藍芽資料傳輸 : 余宗勳 遊戲結束判斷 : 陳道生 、余宗勳 遊戲美工 : 陳道生
研究動機 • 藍芽是一種低成本、低功率的無線連接技術,在電腦週邊、手機週邊也有許多利用藍芽傳輸達到無線通訊的產品。藍芽傳輸訊息是免費,故其遊戲性非常高,從線上遊戲的推出以來受到廣大民眾的熱烈反應,這顯示單機版的遊戲已不再具有吸引力,故以藍芽微平台進行手機對戰的時代已經來臨。 • 藉著不斷革新並為使用者開發程式及工具,藍牙技術聯盟始終位居藍牙技術在個人區域網路市場(PAN)的領先地位。「PTS對業界來說是無可取替的,它也將在持續成長的藍牙技術領域中,扮演重要的角色」 • 藍芽的前瞻性高,且以遊戲為專題非常吸引人,這些條件為依據 故以手機藍芽同步遊戲展現對戰之有趣性
研究流程 修正學長BUG, 發現同步遊戲興趣 依學長範例為底, 同步為主要目的開發新遊戲 模擬器測試 實機測試 完成
研究問題 • 探究Bluetooth,增進對Bluetooth之瞭解 • Bluetooth如何傳輸 • 碰撞偵測 • 如何利用對戰展現同步
MIDP行動資訊裝置套件(Mobile Information Device Profile ☆ MIDP是基於J2ME架構的技術套件,主要提供一組無線通訊平台的環境,可用來開發可移動小型資訊設備上所需的應用系統。 ☆ MIDP源自於J2ME架構下的CLDC,依此架構而設計的行動電話,即稱之為Java手機 (Java Enabled Phone)。MIDP提供手機所需的各種核心功能,包括使用者介面、網路連結、資料儲存等,是一個完整且標準的Java應用程式介面(API)的總集合。 ☆ CLDC (Connected Limit Devices Configuration) CLDC 服務於512KB 以下的應用程式、有限能源供應(通常使用電池)、有限或非持續網路連接、簡單(或無)的用戶介面,適用於性能相對較差資源較有限的消費性電子產品(運算能力較低、記憶體容量較有限)如:手機、PDA。
玩家移動 • getkeyState() 會回傳一個整數值 UP_PRESSED (Up key) DOWN_PRESSED (Down key) 玩家追逐球,產生碰撞 實作應用: if ((keyState & UP_PRESSED) !=0) club1YSpeed=-5; else if ((keyState & DOWN_PRESSED) !=0) club1YSpeed=5;
碰撞觸發 碰撞可分 矩形碰撞偵測 (Rectangle collision detection) 內縮矩行碰撞偵測 (Shrunken rectangle collision detection) 影像資料碰撞偵測 (Image data collision detection) 其中以影像資料碰撞偵測精細度最高,但對於處理資料的負擔也越重,為減少手機之負擔,故以矩形碰撞偵測為此次專題的主軸
矩形碰撞偵測(Rectangle collision detection) 我們使用 MIDP (Mobile Information Device Profile 行動資訊裝置套件)來偵測碰撞的發生,前三種簡述的碰撞偵測全都叫做 collidesWith( ) ballSprite.collidesWith(clubSprite,true) 一但發生,在X軸上將球的速度改為負值
所遇問題與解決 I 數值傳送不一 同步顧名思義就是雙方動作同步化的問題,舉例來說,當甲機操縱者按下按鈕,會觸動BluePadCanvas的pointerReleased(),把位移量給傳送到乙機,傳送的部份會在BluePad裡面執行。一開始作法是將乙機所收到的位移量由BluePad再傳到BluePadCanvas裡的update(),使其移動,但是這樣卻發生了問題,傳送的值不一定相等。 比方說,甲機按了兩次按鈕,那應該只會移動兩次而已,但是乙機卻不一定會收到兩次位移量,而是有可能完全沒收到,或是一次移動6-8次的位移量。 解決方法: 後來經過了多方測試,發覺其實不用特地把值再丟到BluePadCanvas,可以直接在BluePad裡收到位移量後,呼叫move()直接移動棍子,因而解決了傳送值不一定相同的問題,這解決方法也同時應用在球上。
所遇問題與解決 II 流暢度問題: 雖然最後的位移量相同,但可能甲機移動之後,乙機還會延遲才到定位,如此會發生肉眼可辨識出來的DELAY問題,會影響到遊戲的進行。 解決方法: 1. 是藍芽偵測狀態的時間,第二個是frameDelay的大小,frameDelay數值越小,FPS越大。藍芽偵測狀態的時間,原本為300毫秒會偵測一次狀態,後來經過多次的測試,只有frameDelay =1 (毫秒)偵測一次時,看起來才會比較順暢。 改善情況: 依然會有微小的延遲 解決方法: 2. 調整frameDelay的大小,經測試,frameDelay約為15以下才會比較順暢。 ☆這兩個大問題解決掉之後,同步化問題才算是大概的解決了。
所遇問題與解決 III 當以手邊的資源實機操作時,卻無法正常運作 碰到的困難點: 在模擬器運作時,假如程式有問題的時,會顯示出問題點,進而改進,但當手機測試時,手機只會顯示無法執行,不會顯示問題點。 嘗試了解問題: 1. 從最簡單的小程式了解問題,用Morrison出版的”手機遊戲程式設計”裡的小遊戲進行測試,卻依然無法執行 2. 將可能的問題點改為註解測試,到最後程式碼幾乎只剩下把螢幕畫黑的簡單小功能,依然無法執行。 3. 找同學借有藍芽功能的手機測試,上傳後可以執行,證明程式碼並沒問題。 結論推測: 使用2007年推出的手機作為平台,成功執行此程式,由此做個推斷, NOKIA6670上的JAVA平台過於老舊,因此以NOKIA6233為專題展示平台。