999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于藍牙3D多人手機游戲的設計與實現

2009-04-29 00:00:00王天順,盛光磊
電腦知識與技術 2009年33期

摘要:該文介紹了M3G(移動3D圖形標準,Mobile 3D Graphics)和JABWT(Java藍牙無線規范,Java APIs for Bluetooth Wireless Technology)的功能及優點,并且以多人賽車游戲為例,給出一個基于藍牙技術的3D多人手機游戲的設計與實現。

關鍵詞:M3G;JABWT;手機游戲

中圖分類號:TN929文獻標識碼:A文章編號:1009-3044(2009)33-9522-03

Design and Implementation of 3D Multi-player Mobile Game Supported by Bluetooth Wireless Technology

WANG Tian-shun, SHENG Guang-lei

(Shengda College of Economics TradeManagement, Zhengzhou University, Zhengzhou 451191, China)

Abstract: This paper introduces the functions and advantages of M3G (Mobile 3D Graphics API) and JABWT (Java APIs for Bluetooth Wireless Technology) and gives an example of multi-player car racing game for describing the design and implementation of 3D multi-player mobile games supported by Bluetooth wireless technology.

Key words: M3G; JABWT; mobile game

1 概述

隨著手機相關硬件性能的不斷提高,如處理器速度的加快、存儲容量的增加、3D圖形顯示和渲染技術在手機上的成熟,以及手機應用程序開發包和操作系統平臺功能的不斷增強,使得手機移動類游戲成了開發熱點,一個極具吸引力且快速發展的產業。該文首先介紹了M3G(JSR 184[1])和JABWT(JSR82[2])協議,之后給出了一個基于藍牙的3D多人賽車游戲的實現。

2 相關規范

2.1 M3G概述

JCP(Java Community Process,Java社區過程)于2003年11月發布了M3G(JSR184),同時SuperScape和Hibrid公司實現了M3G規范協議,并且基于該規范的3D引擎以及程序開發包也分別投入市場。這一系列的事件標志著開發基于J2ME的手機3D程序成為一個新興產業,手機上的3D應用將會是一個非常大的發展方向,比如3D游戲、3D虛擬現實技術,用戶界面,3D屏保等。

2.2 JABWT概述

JABWT(Java APIs for Bluetooth Wireless Technology,JSR82)規定了一個標準的J2ME藍牙開發平臺,保證開發出來的程序可以在任何J2ME設備上運行,而不必考慮由于硬件平臺和協議棧的不同對應用程序產生的影響[3]。基于JABWT的J2ME藍牙開發模式不僅提高了開發效率,同時由于JABWT規范通過統一的Java語言平臺和標準的藍牙開發平臺,使得J2ME藍牙設備可以根據環境動態的下載并執行第三方開發的藍牙應用代碼。

3 藍牙3D多人手機游戲的設計與實現

基于M3G和JABWT規范的藍牙3D多人手機游戲的程序流程圖如圖1所示。

游戲開始首先要輸入玩家的名稱,然后Slave端發布服務,Master根據發現的玩家信息,選擇哪幾個玩家參與游戲。

根據游戲的要求,定義了四種傳輸數據類型:

PlayerAction:對游戲中的鍵盤事件進行的窮舉,根據事件決定玩家角色如何運動;

PlayerState:定義了玩家控制的角色所需參數,用來進行坐標校正;

MasterCommand:Master端的命令,Slave根據Master端發送命令的不同進行不同的響應;

SlaveCommand:Slave端的命令,Master根據Slave端命令的不同進行不同的響應;

這些命令信息的發送需要在本地進行序列化,在遠端進行反序列化,故定義了EM3DSerialization接口,所有以上四類需要傳輸數據的類都必須繼承自這個接口。

接口定義如下:

public interface EM3DSerialization {

public byte[] serialize() throws IOException;

public void deserialize( byte[] data ) throws IOException;

}

一個Slave端發送信息的需要通過Master轉發到其它Slave端,而Master端發送的信息則不必轉發,信息的發送與接收如圖2所示。

建立連接后,手機屏幕上的當前顯示對象為BluetoothCanvas類的一個實例,它派生自Canvas類,內部生成2類線程:

重繪線程,用于屏幕重繪(每個實例僅有一個);

通訊線程,用于和遠端用戶進行信息的接收(Master端根據連接的Slave數量創建相應數目的線程,Slave端僅一個和Master端的連接);

因為生成的通訊線程是BluetoothCanvas類的內部對象,故所有信息的發送需要統一調用BluetoothCanvas類中的方法:transportCommand()和serialize()。transportCommand()方法根據事先定義的通訊規則(根據命令的來源與功能的不同,如屏幕按鍵事件,Master轉發事件,計算網絡延遲事件,坐標校正事件)封裝、發送數據。欲發送的命令信息經過序列化后返回一個字節數組。

發送來的數據在接收線程的run()方法中進行命令解析,根據事先定義的通訊規則,由keyParseCommand()、 masterParseCommand()和 slaveParseCommand()分別調用deserialize()方法對讀入的字節數組進行反序列化。

transportCommand()方法主要代碼如下所示:

//command是傳遞的按鍵、命令等信息

//_transmitMsg判斷是否需要轉發

//index可以指定轉發向哪個連接

//keyPressed值在解析按鍵信息時有用,默認為1,僅在keyPressed事件中賦值為true

//canvasEvent用來區別是按鍵還是系統產生的消息

public synchronized void transportCommand( int command , boolean _transmitMsg, int index ,

boolean keyPressed , boolean canvasEvent)

{ //計算網絡延遲用

if( MasterCommand.MASTER_RE_NETSYNCHRONIZE == command ) {……}

if( SlaveCommand.SLAVE_NETSYNCHRONIZE == command ) {……}

if( SlaveCommand.SLAVE_NETSYNCHRONIZE2 == command ) {……}

//對PlayerAction對象進行參數設定,準備傳輸

if(Role.ROLE_MASTER == role) {……}

else if (Role.ROLE_SLAVE == role) {……}

//Master端要將該消息轉發給其它Slave端

if(MasterCommand.MASTER_RETRANSMITMSG == command) {……}

//發送消息

//Master向所有的Slave廣播本地產生的事件

//Slave向Master發送本地產生的事件,故Master需要轉發該信息到其它Slave端

for( int i=0; i

}

serialize()方法主要代碼如下所示:

public void serialize(EM3DSerialization em3dSerialization, BluetoothConnection bluetoothConnection)

{OutputStream os = bluetoothConnection.getOutputStream();

em3d_data = em3dSerialization.serialize();

//數據傳輸:

//1、把數據序列化后的長度傳出

//2、byte數組傳出

bluetoothConnection.writeInt(em3d_data.length);

os.write(em3d_data);

os.flush();

em3d_data = 1;

}}

deserialize()方法主要代碼如下所示:

public void deserialize(EM3DSerialization em3dSerialization, BluetoothConnection bluetoothConnection)

{InputStream is = bluetoothConnection.getInputStream();

int length = bluetoothConnection.readInt();

em3d_data = new byte[length];

is.read(em3d_data);

em3dSerialization.deserialize(em3d_data);

}

在BluetoothCanvas類的重繪方法中一個Graphics3D類的實例對該Canvas的Graphics對象進行綁定,來繪制3D世界。進行場景繪制的代碼如下所示:

public void paint( Graphics g )

{

iG3D = iG3D.getInstance();

iG3D.bindTarget(g, true, 0);

try{

iG3D.render(scene);

}catch(Exception e){}

finally { iG3D.releaseTarget(); }

}

3D世界和汽車均是通過3DMax建模產生,首先建立模型,模型構造完畢后,通過3DMax自帶的導出工具生成m3g格式的文件,通過JSR184的Loader類讀入,并通過Canvas渲染到屏幕表面上。聯機游戲的效果如圖3所示:

圖3 聯機效果圖

4 結束語

根據調查顯示,69%的調查者表示比起一起玩手機上的網絡游戲,他們更愿意和朋友一起玩通過藍牙聯接的局域網游戲。而3D游戲也己經成為一個不可逆轉的大趨勢,各手機制造商都把支持3D游戲作為一個新的賣點。在手機等移動設備飛速發展的今天,相信J2ME必定會在無線設備嵌入式系統開發中應有更廣闊的應用前景。

參考文獻:

[1] Sun Microsystems.JSR184: Mobile 3D Graphics API for J2ME[S].

[2] Sun Microsystems.JSR82:JavaTM APIs for Bluetooth[S].

[3] Nokia.Game Over Bluetooth:Recommdations to Game Developers[S].

主站蜘蛛池模板: 久久婷婷色综合老司机| www亚洲精品| 精品国产成人高清在线| 2022国产91精品久久久久久| 亚洲精品成人7777在线观看| 麻豆国产精品视频| 亚洲视频在线网| 97视频免费在线观看| 欧美精品二区| 久久久久亚洲AV成人人电影软件| 日韩在线永久免费播放| 日韩东京热无码人妻| 精品伊人久久久香线蕉 | 国产精彩视频在线观看| 色婷婷国产精品视频| 91精品国产综合久久香蕉922| 色天天综合| 色视频国产| 国产va视频| 欧美一级高清片久久99| 狠狠色综合久久狠狠色综合| 亚洲免费毛片| 白浆视频在线观看| 欧美成人午夜视频| 高清无码一本到东京热| 国产一级片网址| 在线免费不卡视频| 国产精品成人一区二区不卡 | 丰满人妻久久中文字幕| 成人精品视频一区二区在线| 久久免费看片| 精品亚洲麻豆1区2区3区| 亚洲美女一级毛片| 国产成人精品一区二区不卡 | 欧美在线一二区| 欧美不卡二区| 欧美a网站| 欧美日韩亚洲综合在线观看| 欧美精品亚洲精品日韩专区| 亚洲不卡av中文在线| 国产精彩视频在线观看| 白浆免费视频国产精品视频| 毛片在线播放网址| 色屁屁一区二区三区视频国产| 午夜视频www| 久久性妇女精品免费| 国产精品视频第一专区| 亚洲伊人天堂| 欧美在线精品一区二区三区| 啪啪免费视频一区二区| 欧美福利在线| 欧美精品成人一区二区在线观看| 无遮挡国产高潮视频免费观看| 欧美激情第一欧美在线| 国产精品亚洲一区二区三区在线观看| 国产精品刺激对白在线| 99热这里只有精品在线播放| 精品国产Av电影无码久久久| 毛片在线播放a| 91青青草视频在线观看的| 国产永久无码观看在线| 国产精品成| 成人第一页| 一级毛片免费不卡在线| 99视频精品在线观看| 综合人妻久久一区二区精品 | 夜精品a一区二区三区| 国产成人亚洲精品色欲AV| 国产欧美视频在线观看| 在线免费亚洲无码视频| 在线播放精品一区二区啪视频| 欧美成人h精品网站| 99热这里都是国产精品| 伊在人亚洲香蕉精品播放| 五月天香蕉视频国产亚| 欧美视频二区| 97视频在线观看免费视频| 日韩精品一区二区三区中文无码| 久久五月视频| 九九热视频精品在线| 中文字幕在线看视频一区二区三区| 欧美日韩激情在线|