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

基于OGRE的網絡游戲界面模塊的設計與實現

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

摘要:網絡游戲界面模塊的設計是游戲客戶端的重要組成部分,也是網絡游戲能夠同步、穩定、流暢的與玩家交互的關鍵要素。該文在OGRE引擎的基礎上,根據采用Overlay進行界面設計時存在的開發復雜、不易于拓展、不方便維護等不足,提出了采用CEGUI和Lua腳本進行界面設計的方案。

關鍵詞:網絡游戲;界面;OGRE;CEGUI;Lua;腳本

中圖分類號:TP311文獻標識碼:A文章編號: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

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

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

OGRE是Object-Oriented Graphics Rendering Engine(面對對象的圖形渲染引擎)的簡稱,是用C++開發的面向對象的3D引擎[1]。引擎中的類庫對更底層的系統庫(如:Direct3D和OpenGL)的全部使用細節進行了抽象,并提供了基于現實世界對象的接口和其它類。OGRE是一個專業的圖形渲染引擎,進行游戲開發,必須給它外接各種各樣的第三方功能庫。網絡游戲客戶端包括六個模塊,客戶端引擎架構如圖1所示。

網絡游戲界面提供了玩家和游戲交互的所有接口,它的設計好壞直接決定了玩家是否對所設計的游戲感興趣。在該方案中采用的是一種基于組件方式的游戲UI架構設計方案,在OGRE基礎上使用CEGUI和Lua來實現這種靈活的框架。

2 界面模塊總體框架設計

整個界面模塊包括界面通信層、界面功能層和界面表現層三部分,總體框架設計如圖2所示。通過三個模塊層的交互得到界面全局管理,實現登錄界面、角色創建界面、角色選擇界面、游戲大廳界面、游戲主界面、游戲主界面。

界面通信層使用C++實現,完成與服務器端得消息通信。界面模塊的數據處理主要包括兩部分內容,一部分是玩家自己的信息更新的時候,需要打包發給服務器,一部分是服務器發給玩家的信息,這些信息要及時的在界面上做出反應。

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

界面表現層使用CEGUI來實現,CEGUI是個GUI庫,本身不做渲染,該方案中為CEGUI提供了一個OGRE渲染器,然后把鼠標和鍵盤事件注入系統,這樣完成對界面模塊渲染和完全控制。界面表現層使用了四種類型的xml文件scheme,looknfeel,imageset和layout。

3 界面模塊的具體實現

3.1 界面通信模塊消息結構

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

struct msBase

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

long MessageType; // 消息類型

long PlayerID;// 玩家ID

};

下面的消息結構是系統登錄后,由服務器返回的角色的基本信息,這些信息要在界面模塊里保存下來,以便于整個界面信息的更新。

const long mtCharacterInfo=10008;

struct msCharacterInfo: public msBase

{ msCharacterInfo():msBase(mtCharacterInfo){}

long CharacterID; // 角色ID

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

long Figure;// 角色性別

long SuiModel; // 是否創建角色

long CurLife;// 角色當前的生命值

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

long CurTool;// 角色當前使用的工具

long CurMission;// 角色當前的任務

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

long GameGrade;// 角色等級

};

3.2 界面模塊嵌入到引擎

CEGUI(Crazy Eddie's GUI System)是GUI庫,是一個嵌入的GUI系統,基于LGPL協議,使用C++實現,完全面向對象設計[2]。CEGUI的渲染需要3D圖形API的支持,本方案中使用OGRE圖形引擎渲染器。在OGRE客戶端createScene函數中初始化CEGUI,主要代碼如下:

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

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

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

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

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

服務器端在接下來的運行中,每一幀刷新一次界面,保證界面模塊的數據即時更新,代碼如下:

pUI = new Ken_UI;

3.3 資源加載

在每一幀的界面的刷新過程中,首先執行lua腳本,通過lua文件加載其它資源,調用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首先調用的一個xml文件,其中包括要使用的imageset文件、對應的looknfeel文件,以及將要在looknfeel定義的控件的類型、工廠、渲染器和在looknfeel中的名稱。

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

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

imageset文件把tga圖片上的位置信息記錄下來,位置信息由左上角橫縱坐標,長寬信息組成。Image是tga圖片的集合,每套的基本樣式不同。

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

3.5 lua與C++交互

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

使用tolua++的過程:

1) 編寫pkg文件生成對應的c++文件;

2) 分別編譯1)產生的文件(注意要加上對應的頭文件)和需要使用lua腳本的文件;

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

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

4 方案運用實例

基于上述設計思想,在OGRE引擎基礎上,結合CEGUI庫和lua腳本,進行了網絡游戲界面模塊的設計與實現,系統顯示速度快,畫面流暢,在實際的項目中,運行效果良好。圖3為游戲大廳界面設計,圖4為游戲場景界面設計。

圖3 游戲大廳界面圖4 游戲場景界面

5 結束語

該文提出的基于OGRE的網絡游戲界面模塊設計方案,充分利用面向對象的特性,具有良好的重用性、拓展性和層次性,得到了較好的測試效果,易于拓展,方便維護,且降低了開發的復雜性,今后將對方案進一步完善,如把CEGUI和Lua腳本集成到一個界面環境中。

參考文獻:

[1] OGRE技術主頁[EB/OL].http://www.ogre3d.org.

[2] CEGUI技術主頁[EB/OL]..http://www.cegui.org.uk.

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

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

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

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

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

[8] 李虎雄,徐貫東,張燕姑.網絡游戲數據平臺數據通訊的實現方案[J].計算機工程與設計,2005(11).

主站蜘蛛池模板: 福利在线免费视频| 欧美亚洲国产精品久久蜜芽| 99re热精品视频国产免费| 91免费国产在线观看尤物| 亚洲男人的天堂在线观看| 免费在线色| 亚洲国模精品一区| 国产免费a级片| 国产精品成人不卡在线观看| 欧美成人看片一区二区三区 | 久久久亚洲色| 欧美精品一区在线看| 无码高潮喷水专区久久| 精品伊人久久久大香线蕉欧美| 99re精彩视频| 99久久精品免费看国产免费软件| 亚洲第一综合天堂另类专| 国产综合欧美| 国产精品亚洲va在线观看| 亚洲日韩第九十九页| 黄色片中文字幕| 久久久久免费看成人影片| 亚洲天堂久久久| 国产无码在线调教| 国产成熟女人性满足视频| 成年人国产视频| 久久亚洲AⅤ无码精品午夜麻豆| 亚洲人成日本在线观看| 综合亚洲网| 亚洲成aⅴ人在线观看| 国产乱子伦一区二区=| 国禁国产you女视频网站| 婷婷午夜影院| 制服丝袜亚洲| 欧洲免费精品视频在线| 嫩草国产在线| 国产亚洲精久久久久久无码AV| 中文字幕伦视频| 91免费在线看| 免费播放毛片| 国产精品夜夜嗨视频免费视频| 91外围女在线观看| 一本一本大道香蕉久在线播放| 丁香婷婷久久| 成人亚洲天堂| 国产黄在线免费观看| 日韩一区精品视频一区二区| 青青草原国产免费av观看| 亚洲国产综合精品一区| 亚洲精品视频免费| 欧美三级日韩三级| 亚洲天堂网在线视频| 亚洲AV无码久久天堂| 亚洲a级在线观看| 激情综合网址| 国产区人妖精品人妖精品视频| 亚洲va在线观看| 国产91透明丝袜美腿在线| 国产乱子精品一区二区在线观看| 狠狠色丁香婷婷| 亚洲欧洲日本在线| 亚洲精品无码在线播放网站| 98超碰在线观看| 国产swag在线观看| 日韩久草视频| 国产色婷婷视频在线观看| 中国一级毛片免费观看| 成年看免费观看视频拍拍| 国产精品亚欧美一区二区三区| 欧美在线中文字幕| 韩国福利一区| 一本视频精品中文字幕| 国产在线观看第二页| 免费观看三级毛片| 伊人无码视屏| 色综合激情网| 国产原创演绎剧情有字幕的| 亚洲AV无码一二区三区在线播放| 2020亚洲精品无码| 91免费国产在线观看尤物| 亚洲日韩欧美在线观看| 国产亚洲精品自在线|