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

基于OGRE的網(wǎng)絡(luò)游戲界面模塊的設(shè)計(jì)與實(shí)現(xiàn)

2009-04-29 00:00:00李廣松,陳榮征
電腦知識(shí)與技術(shù) 2009年33期

摘要:網(wǎng)絡(luò)游戲界面模塊的設(shè)計(jì)是游戲客戶端的重要組成部分,也是網(wǎng)絡(luò)游戲能夠同步、穩(wěn)定、流暢的與玩家交互的關(guān)鍵要素。該文在OGRE引擎的基礎(chǔ)上,根據(jù)采用Overlay進(jìn)行界面設(shè)計(jì)時(shí)存在的開(kāi)發(fā)復(fù)雜、不易于拓展、不方便維護(hù)等不足,提出了采用CEGUI和Lua腳本進(jìn)行界面設(shè)計(jì)的方案。

關(guān)鍵詞:網(wǎng)絡(luò)游戲;界面;OGRE;CEGUI;Lua;腳本

中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)33-9297-03

The Design and Realization of Online Game Interface Module Based on Object-oriented Graphics Rendering Engine (OGRE)

LI Guang-song, CHEN Rong-zheng

(Department of Information Engineering, Guangdong Institute of Textile Technology, Foshan 528041, China)

Abstract: The design of game interface module, which is a importance constitute part of client engine, is a key factor to make multi-player online game run synchronously, stably and smoothly.Using overlay to design interface Based on OGRE, according to existing complexity to develop, difficulty to extend, inconvenience to maintenance, the paper puts forward an blue print, using CEGUI and Lua script for interface module design.

Key words: online game; interface; OGRE; CEGUI; Lua; script

網(wǎng)絡(luò)游戲是以互聯(lián)網(wǎng)為依托,可以多人同時(shí)參與的電腦游戲,人們通過(guò)交互得到交流、娛樂(lè)和休閑的目的。網(wǎng)絡(luò)游戲通常分為服務(wù)器端和客戶游戲端兩部分。網(wǎng)絡(luò)游戲界面模塊是客戶端模塊的重要組成部分,是玩家和服務(wù)器端進(jìn)行溝通的唯一途徑,界面模塊設(shè)計(jì)的好壞,直接影響到玩家與游戲交互的好壞。基于OGRE網(wǎng)絡(luò)游戲開(kāi)發(fā)中,傳統(tǒng)使用的Overlay方法進(jìn)行界面設(shè)計(jì)時(shí),存在開(kāi)發(fā)復(fù)雜、不易于拓展、不方便維護(hù)等缺點(diǎn),該文遵循與服務(wù)器的通信機(jī)制,提出了一套完整的游戲界面設(shè)計(jì)方案OGRE+CEGUI+Lua,這種方案具有良好的層次性、封裝性、易理解性,經(jīng)過(guò)測(cè)試達(dá)到了預(yù)期效果,證實(shí)了方案的合理性,可行性和實(shí)用性。

1 引擎客戶端界面模塊分析

OGRE是Object-Oriented Graphics Rendering Engine(面對(duì)對(duì)象的圖形渲染引擎)的簡(jiǎn)稱,是用C++開(kāi)發(fā)的面向?qū)ο蟮?D引擎[1]。引擎中的類庫(kù)對(duì)更底層的系統(tǒng)庫(kù)(如:Direct3D和OpenGL)的全部使用細(xì)節(jié)進(jìn)行了抽象,并提供了基于現(xiàn)實(shí)世界對(duì)象的接口和其它類。OGRE是一個(gè)專業(yè)的圖形渲染引擎,進(jìn)行游戲開(kāi)發(fā),必須給它外接各種各樣的第三方功能庫(kù)。網(wǎng)絡(luò)游戲客戶端包括六個(gè)模塊,客戶端引擎架構(gòu)如圖1所示。

網(wǎng)絡(luò)游戲界面提供了玩家和游戲交互的所有接口,它的設(shè)計(jì)好壞直接決定了玩家是否對(duì)所設(shè)計(jì)的游戲感興趣。在該方案中采用的是一種基于組件方式的游戲UI架構(gòu)設(shè)計(jì)方案,在OGRE基礎(chǔ)上使用CEGUI和Lua來(lái)實(shí)現(xiàn)這種靈活的框架。

2 界面模塊總體框架設(shè)計(jì)

整個(gè)界面模塊包括界面通信層、界面功能層和界面表現(xiàn)層三部分,總體框架設(shè)計(jì)如圖2所示。通過(guò)三個(gè)模塊層的交互得到界面全局管理,實(shí)現(xiàn)登錄界面、角色創(chuàng)建界面、角色選擇界面、游戲大廳界面、游戲主界面、游戲主界面。

界面通信層使用C++實(shí)現(xiàn),完成與服務(wù)器端得消息通信。界面模塊的數(shù)據(jù)處理主要包括兩部分內(nèi)容,一部分是玩家自己的信息更新的時(shí)候,需要打包發(fā)給服務(wù)器,一部分是服務(wù)器發(fā)給玩家的信息,這些信息要及時(shí)的在界面上做出反應(yīng)。

界面功能層使用lua腳本實(shí)現(xiàn),完成界面實(shí)現(xiàn)的功能主要函數(shù)。使用lua腳本語(yǔ)言,必須找到一個(gè)合適的Lua的C++封裝,在本方案中采用tolua++,編譯后,就可以使用定義的函數(shù)了,實(shí)現(xiàn)與C++的交互處理。

界面表現(xiàn)層使用CEGUI來(lái)實(shí)現(xiàn),CEGUI是個(gè)GUI庫(kù),本身不做渲染,該方案中為CEGUI提供了一個(gè)OGRE渲染器,然后把鼠標(biāo)和鍵盤事件注入系統(tǒng),這樣完成對(duì)界面模塊渲染和完全控制。界面表現(xiàn)層使用了四種類型的xml文件scheme,looknfeel,imageset和layout。

3 界面模塊的具體實(shí)現(xiàn)

3.1 界面通信模塊消息結(jié)構(gòu)

該方案中服務(wù)器端提供給界面模塊的接口是GetUiMsg(buf, len)和SendUiMsg(buf, len),界面模塊的消息基類為:

struct msBase

{msBase(long mt,long pid = 0){MessageType = mt; PlayerID = pid;}

long MessageType; // 消息類型

long PlayerID;// 玩家ID

};

下面的消息結(jié)構(gòu)是系統(tǒng)登錄后,由服務(wù)器返回的角色的基本信息,這些信息要在界面模塊里保存下來(lái),以便于整個(gè)界面信息的更新。

const long mtCharacterInfo=10008;

struct msCharacterInfo: public msBase

{ msCharacterInfo():msBase(mtCharacterInfo){}

long CharacterID; // 角色I(xiàn)D

char Nickname[16];// 角色名稱

long Figure;// 角色性別

long SuiModel; // 是否創(chuàng)建角色

long CurLife;// 角色當(dāng)前的生命值

long MaxLife;// 角色最大的生命值

long CurTool;// 角色當(dāng)前使用的工具

long CurMission;// 角色當(dāng)前的任務(wù)

long Cash;// 角色虛擬貨幣值

long GameGrade;// 角色等級(jí)

};

3.2 界面模塊嵌入到引擎

CEGUI(Crazy Eddie's GUI System)是GUI庫(kù),是一個(gè)嵌入的GUI系統(tǒng),基于LGPL協(xié)議,使用C++實(shí)現(xiàn),完全面向?qū)ο笤O(shè)計(jì)[2]。CEGUI的渲染需要3D圖形API的支持,本方案中使用OGRE圖形引擎渲染器。在OGRE客戶端createScene函數(shù)中初始化CEGUI,主要代碼如下:

myRenderer = new CEGUI::OgreCEGUIRenderer(SJJ_Engine::getSingleton().mWin,

RENDER_QUEUE_OVERLAY,1,0,SJJ_Engine::getSingleton().mSceneMgr);

lua是一個(gè)面向過(guò)程的腳本設(shè)計(jì)語(yǔ)言,它明顯的特征就是可以用它編寫的程序來(lái)對(duì)它自身進(jìn)行拓展。它的核心代碼比較少,通常是由用戶來(lái)實(shí)現(xiàn)附加的特征(比如類)。lua是一個(gè)簡(jiǎn)潔的、高度可擴(kuò)展的可編譯語(yǔ)言,也能很好的和C/C++進(jìn)行交互。在OGRE中初始化lua腳本,主要代碼如下:

CEGUI::LuaScriptModule* script_module = new CEGUI::LuaScriptModule();

new CEGUI::System(myRenderer, 0, 0,script_module);

服務(wù)器端在接下來(lái)的運(yùn)行中,每一幀刷新一次界面,保證界面模塊的數(shù)據(jù)即時(shí)更新,代碼如下:

pUI = new Ken_UI;

3.3 資源加載

在每一幀的界面的刷新過(guò)程中,首先執(zhí)行l(wèi)ua腳本,通過(guò)lua文件加載其它資源,調(diào)用lua腳本代碼如下:

void Ken_UI::LoadInitScripts()

{ Ken_ApiManager::LoadLuaApi();

CEGUI::System::getSingleton().executeScriptFile(\"Init_Script.lua\");}

在lua文件中加載CEGUI中scheme文件,主要代碼如下:

local guiSystem = CEGUI.System:getSingleton()

local schemeMgr = CEGUI.SchemeManager:getSingleton()

local winMgr = CEGUI.WindowManager:getSingleton()

schemeMgr:loadScheme(\"Main.scheme\")

3.4 資源文件類型[2]

scheme文件是CEGUI首先調(diào)用的一個(gè)xml文件,其中包括要使用的imageset文件、對(duì)應(yīng)的looknfeel文件,以及將要在looknfeel定義的控件的類型、工廠、渲染器和在looknfeel中的名稱。

layout文件包含了窗口布局的xml表示。每個(gè)嵌套的window元素定義了被創(chuàng)建的window 或是widget。Property元素定義了窗口的設(shè)置與屬性值。Layout也可在CEGUI的Editor中編輯后輸出。

looknfeel文件定義了控件的細(xì)節(jié),包括該控件各部分所用圖片名稱,位置,顏色,背景,邊框等,還有各種屬性的定義,用到的圖片名稱可在相應(yīng)的imageset文件中找到。修改looknfeel文件就等于修改了某一類控件的樣式。

imageset文件把tga圖片上的位置信息記錄下來(lái),位置信息由左上角橫縱坐標(biāo),長(zhǎng)寬信息組成。Image是tga圖片的集合,每套的基本樣式不同。

font文件定義了在 CEGUI中所使用的字體類型。Windows系統(tǒng)中所有的字體文件都可以用CEGUI加載。

3.5 lua與C++交互

為了使用tolua++,需要三個(gè)文件[4]:tolua++[.exe](tolua++的可執(zhí)行程序),tolua++.h(tolua++的頭文件),libtolua++.a或者lib/tolua++.lib(tolua++的靜態(tài)庫(kù))。

使用tolua++的過(guò)程:

1) 編寫pkg文件生成對(duì)應(yīng)的c++文件;

2) 分別編譯1)產(chǎn)生的文件(注意要加上對(duì)應(yīng)的頭文件)和需要使用lua腳本的文件;

3) 編寫lua腳本,遵從lua的語(yǔ)法并且使用到的變量、函數(shù)、類等都是1)中聲明過(guò)的。

編譯后,就可以使用定義的函數(shù)了。方案中定義的接口放在Ken_ApiManager.h文件中,回調(diào)函數(shù)放在Global.lua文件中。

4 方案運(yùn)用實(shí)例

基于上述設(shè)計(jì)思想,在OGRE引擎基礎(chǔ)上,結(jié)合CEGUI庫(kù)和lua腳本,進(jìn)行了網(wǎng)絡(luò)游戲界面模塊的設(shè)計(jì)與實(shí)現(xiàn),系統(tǒng)顯示速度快,畫面流暢,在實(shí)際的項(xiàng)目中,運(yùn)行效果良好。圖3為游戲大廳界面設(shè)計(jì),圖4為游戲場(chǎng)景界面設(shè)計(jì)。

圖3 游戲大廳界面圖4 游戲場(chǎng)景界面

5 結(jié)束語(yǔ)

該文提出的基于OGRE的網(wǎng)絡(luò)游戲界面模塊設(shè)計(jì)方案,充分利用面向?qū)ο蟮奶匦裕哂辛己玫闹赜眯浴⑼卣剐院蛯哟涡裕玫搅溯^好的測(cè)試效果,易于拓展,方便維護(hù),且降低了開(kāi)發(fā)的復(fù)雜性,今后將對(duì)方案進(jìn)一步完善,如把CEGUI和Lua腳本集成到一個(gè)界面環(huán)境中。

參考文獻(xiàn):

[1] OGRE技術(shù)主頁(yè)[EB/OL].http://www.ogre3d.org.

[2] CEGUI技術(shù)主頁(yè)[EB/OL]..http://www.cegui.org.uk.

[3] 房曉溪.游戲引擎教程[M].北京:中國(guó)水利水電出版社,2007.

[4] Alex V.Game Scripting Mastery[M].北京:清華大學(xué)出版社,2005:142-144.

[5] 于造波.腳本技術(shù)在游戲引擎中的應(yīng)用[J].電腦知識(shí)技術(shù),2008(7):167-170.

[6] 梁健,董德存.基于IMS的游戲平臺(tái)構(gòu)架研究[J].廣東通信技術(shù),2005(7).

[7] 彭永康,章義來(lái).插件及其接口的研究與應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2003(6):122-123.

[8] 李虎雄,徐貫東,張燕姑.網(wǎng)絡(luò)游戲數(shù)據(jù)平臺(tái)數(shù)據(jù)通訊的實(shí)現(xiàn)方案[J].計(jì)算機(jī)工程與設(shè)計(jì),2005(11).

主站蜘蛛池模板: 国产人成网线在线播放va| 欧美日韩国产在线播放| 综合色区亚洲熟妇在线| 国产91蝌蚪窝| 久久精品日日躁夜夜躁欧美| 波多野吉衣一区二区三区av| 激情无码字幕综合| 亚洲国产AV无码综合原创| 一区二区在线视频免费观看| 久久不卡国产精品无码| 97国产在线播放| 国产成人一区| 伊伊人成亚洲综合人网7777| 在线免费观看AV| 久久人搡人人玩人妻精品| 激情无码视频在线看| 伊人国产无码高清视频| 国产91透明丝袜美腿在线| 熟女成人国产精品视频| 亚洲伦理一区二区| 久久精品这里只有国产中文精品| 一本二本三本不卡无码| 国产欧美精品一区二区 | 国产激情第一页| 99热线精品大全在线观看| 国产成年无码AⅤ片在线| 日韩免费毛片| 久久久精品无码一二三区| 无码高潮喷水专区久久| 中文无码日韩精品| 91精品福利自产拍在线观看| 试看120秒男女啪啪免费| 国产第一页免费浮力影院| 亚洲无码91视频| 亚洲成A人V欧美综合| 特级毛片免费视频| 天天激情综合| 国产99精品视频| 伊人无码视屏| 99久久人妻精品免费二区| 国产精品亚洲综合久久小说| 一本无码在线观看| 亚洲第一色视频| 亚洲欧美日韩高清综合678| 青青草久久伊人| 手机精品福利在线观看| 久久国产精品影院| 在线观看亚洲天堂| 伊人久久青草青青综合| 久久男人视频| 美女国内精品自产拍在线播放| 欧美成人综合在线| 久久亚洲高清国产| 精品视频福利| 国产成人欧美| 国产一线在线| 夜夜操国产| 国产91熟女高潮一区二区| 成色7777精品在线| 国产成人免费手机在线观看视频| www欧美在线观看| 国产国模一区二区三区四区| 永久免费精品视频| 中文字幕调教一区二区视频| 91精品专区国产盗摄| 欧美国产精品不卡在线观看| 国产成人精品一区二区| 欧美视频免费一区二区三区| 高清无码不卡视频| 91区国产福利在线观看午夜| 国产美女一级毛片| 亚洲,国产,日韩,综合一区| 九九视频免费看| 色天天综合| 国产美女丝袜高潮| 亚洲AV一二三区无码AV蜜桃| 久视频免费精品6| 爆乳熟妇一区二区三区| 成年免费在线观看| 97国产精品视频自在拍| 欧美日本视频在线观看| 午夜福利视频一区|