freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計(jì)報(bào)告---3d多人在線角色扮演游戲-wenkub

2022-12-12 16:04:44 本頁面
 

【正文】 個(gè)玩家消息 sMessage 消息隊(duì)列中的消息結(jié)構(gòu) sMessageHeader 在所有的消息中使用的消息頭結(jié)構(gòu) sPlayer 玩 家類里面包含玩家的屬性 sRequestPlayerInfoMessage 請(qǐng)求玩家參考消息 sStateChangeMessage 狀態(tài)信息的變化 流程圖 客戶端流程圖 服務(wù)端流程圖 第 14 頁 共 30 頁 TCP/TP協(xié)議 TCP 協(xié)議介紹 TCP—— 傳輸控制協(xié)議。 Mesh需要設(shè)置子集和屬性緩存,繪制天空盒子的 Mesh需要繪制所有的子集,并用相對(duì)應(yīng)的材質(zhì) 和紋理數(shù)組進(jìn)行循環(huán)渲染,每個(gè)子集項(xiàng)與紋理數(shù)組相對(duì)應(yīng)的項(xiàng)必須一一對(duì)應(yīng)。 時(shí)間限制 游戲中不針對(duì)時(shí)間作為限制。 是否可存盤與加載 這是一款網(wǎng)絡(luò)游戲,是絕對(duì)不允許玩家自己儲(chǔ)存游戲進(jìn)程。 可以控制哪些角色 暫時(shí)不可選著角色。 這個(gè)游戲放在哪里運(yùn)行 游戲服務(wù)端在局域網(wǎng)內(nèi)或者互聯(lián)網(wǎng)上運(yùn)行。競(jìng)技場(chǎng)自由 PK,古戰(zhàn)場(chǎng) 1080P逼真還原, 24小時(shí)晝夜更替。游戲提供了多人同時(shí)在線 PK,以及華麗的技能。雖然游戲與市面上大多數(shù)商業(yè)游戲沒有可比性,但項(xiàng)目所體現(xiàn)出來的是讓本團(tuán)隊(duì)了解與學(xué)習(xí) 3D 網(wǎng)絡(luò)游戲開發(fā)。 C++語言寫的客戶端和服務(wù)端,運(yùn)用到了微軟的 版本的 API。 大體完成一個(gè)可運(yùn)行的 3D 游戲框架。 在局域網(wǎng)內(nèi),這些功能的實(shí)現(xiàn)跟廣域網(wǎng)相比更加簡(jiǎn)單,因?yàn)榫钟蚓W(wǎng)的網(wǎng)絡(luò)結(jié)構(gòu)本身比廣域網(wǎng)要復(fù)雜。 游戲類型 3D 渲染 攝像角度: Y軸 360176。 為什么要做這個(gè)游戲 研發(fā)這款游戲本著學(xué)習(xí)的精神,制作這款畢業(yè)設(shè)計(jì)項(xiàng)目。 此游戲客戶端的運(yùn)行平臺(tái) windows XP 以上系統(tǒng),直接雙擊可運(yùn)行文件 exe就可以進(jìn)入游戲中,但在 windows平臺(tái)中必須安裝 directx 。 游戲主要焦點(diǎn)是什么 游戲主要的焦點(diǎn)為 3D與多人 PK。 互聯(lián)要求 游戲采用一套自定義協(xié)議傳輸通信,而不是在網(wǎng)絡(luò)上傳輸 class內(nèi)容。游戲玩家在內(nèi)互相毆斗,死亡率以倍數(shù)的消失。 VC++開發(fā)工具以及 DirectX Visual C++是 Microsoft 公司提供的在 Windows 環(huán)境下進(jìn)行應(yīng)用程序開發(fā)的 C/C++編譯器。 TCP 是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議,在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò) OSI模型中,它完成第四層傳輸層所指定的功能。這和 UDP 完全不同,應(yīng)用程序產(chǎn)生的數(shù)據(jù)包長(zhǎng)度保持不變,由 TCP 傳遞給 IP 的信息單位稱為報(bào)文段或段 TCP 如何確定報(bào)文段的長(zhǎng)度。 TCP 將保持它首部和數(shù)據(jù)的檢驗(yàn)和。 如果必要, TCP 將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。 TCP 的接收端只允許另一端大宋接收端緩沖區(qū)所能接納的數(shù)據(jù),這 將防止較快主機(jī)導(dǎo)致較慢主機(jī)的緩沖區(qū)溢出。油漆是網(wǎng)絡(luò)技術(shù)的發(fā)展,使得當(dāng)前很多系統(tǒng)都采用這種方式進(jìn)行構(gòu)造,其最大的優(yōu)點(diǎn)是將計(jì)算機(jī)工作任務(wù)分別由客戶端呵呵服務(wù)端來共同完成,這樣有利于充分合理的利用系統(tǒng)資源。在客戶發(fā)出一個(gè)請(qǐng)求之前,服務(wù)器進(jìn)程一直處于休眠狀態(tài)。而在 P2P模式轉(zhuǎn)并沒有明確的客戶端和服務(wù)器, 但其實(shí)在 P2P模型中每一臺(tái)計(jì)算機(jī)都可以是服務(wù)器,也可以看成是客戶機(jī)。 滿足原則 1: DRY( Don39。 滿足原則 3:封裝變化、開閉原則。 滿足原則 4:?jiǎn)我宦氊?zé)原則。 滿足原則 5:優(yōu)先利用組合而非繼承。 滿足原則 6:接口分離原則。也就是說,使用游戲內(nèi)核,就無需在每次開始 一個(gè)新的游戲工程時(shí),再去處理底層 DirectX或 Windows代碼。 cApplication 通過調(diào)用重載函數(shù): Init、 Shutdown和 Frame來處理應(yīng)用程序。cStateManager一樣,新的 cProcessManager也在 cProcessManager的基礎(chǔ)上加入了調(diào)用目的以及一個(gè)用戶自定義的指針。使用諸如動(dòng)畫網(wǎng)格之類的 3D 方法渲染場(chǎng)景。 cAnimation 類要同 cObject類結(jié)合起來 圖形系統(tǒng)和 cCraphics: cCraphics 用于設(shè)置顯示模式和渲染狀態(tài)以及清除設(shè)備等等。 BOOL SetWorldPosition(cWorldPosition *WorldPos)。 BOOL SetTexture(short Num, cTexture *Texture)。 cTextre部分代碼如下: BOOL Free()。 // 返回高度(間距)的紋理 D3DFORMAT GetFormat()。 BOOL SetAmbientColor(char Red, char Green, char Blue)。 BOOL SetEmissiveColor(char Red, char Green, char Blue)。cLight部分代碼如下: / /設(shè)置一個(gè)默認(rèn)的光點(diǎn) ZeroMemory(amp。 SetDiffuseColor(255,255,255)。 使用 cFont: cFont處理文本和字體雖然 ID3DXFont對(duì)象處理起來比較容易,但是設(shè)置字體卻讓人痛苦不堪。 if(GraphicsGetDeviceCOM() == NULL)return FALSE。 = Size。 = Strikeout。 return TRUE。 cWorldPosition部分代碼如下: //移動(dòng)世界矩陣 BOOL cWorldPosition::MoveRel(float XAdd, float YAdd, float ZAdd) {return Move(m_XPos + XAdd, m_YPos + YAdd, m_ZPos + ZAdd)。 D3DXMatrixRotationYawPitchRoll(amp。cCamera部分代碼如下: BOOL cCamera::MoveRel(float XAdd, float YAdd, float ZAdd) { return Move(m_XPos + XAdd, m_YPos + YAdd, m_ZPos + ZAdd)。 m_ZRot = ZRot。matYRotation, m_YRot)。 D3DXMatrixMultiply(amp。 第 22 頁 共 30 頁 D3DXMatrixMultiply(amp。 return TRUE。pDXFile))) return FALSE。pDXEnum))) { pDXFileRelease()。如果要反復(fù)使用相同的網(wǎng)絡(luò),該怎么辦? cObject部分代碼如下: BOOL EnableBillboard(BOOL Enable = TRUE)。 BOOL Rotate(float XRot, float YRot, float ZRot)。 使用 cAnimation 移動(dòng)網(wǎng)格: cAnimation類是網(wǎng)格動(dòng)畫組件,也是圖形內(nèi)核的最后一個(gè)類。 BOOL MapToMesh(cMesh *Mesh)。輸入設(shè)備和 cInputDevice類是輸入內(nèi)核種真正起作用的類。此內(nèi)核能夠改變樂器聲音并帶來獨(dú)特的音樂感受。 網(wǎng)絡(luò)適配器類+ H R E S U L T W I N A P I N e t M s g H a n d le r+ 初始化 ()+ 關(guān)閉 ()+ 取網(wǎng)絡(luò)適配器 ()+ 取名字 ()+ *G e t G U I D ( )客戶端類+ 初始化 ()+ 關(guān)閉 ()+ 連接 ()+ 斷開 ()+ 接收 ()+ 發(fā)送 ()+ 發(fā)送文檔 ()服務(wù)端類+ 初始化 ()+ 關(guān)閉 ()+ 連接 ()+ 斷開 ()+ 接收 ()+ 發(fā)送 ()+ 發(fā)送文檔 ()+ 斷開玩家 ()客戶端或服務(wù)端( c A p p )c L i e n t c Se r v e r 使用 cNetworkAdapter 查詢網(wǎng)絡(luò)配適器: cNetworkAdapter 類用于枚舉系統(tǒng)上安裝了 TCP/IP 設(shè)備。要使用 cNetworkClient:: Connect 建立連接,首先必須使用cNetworkAdapter類對(duì)象選出一個(gè)網(wǎng)絡(luò)配適器。缺省情況下,顯示模式 被設(shè)置成使用不帶 Z換成區(qū)的窗口鏡像輸出。在 3D 渲染中如果不使用燈光,那么屏幕上一切都是黑色的。經(jīng)過以上的準(zhǔn)備,就可以使用 Render 函數(shù)渲染多邊形了。m_Graphics)。雖然處理世界變換矩陣并不難,但是用一個(gè)類來處理諸如世界坐標(biāo)、旋轉(zhuǎn)值以及縮放因子等所有細(xì)節(jié),就更簡(jiǎn)單明了。它與 cWorldPosition 類非常類似。要使用攝像機(jī)追蹤方位。DPN_APPLICATION_DESC,同時(shí)也傳遞地址結(jié)構(gòu)的長(zhǎng)度。原來的套接字將繼續(xù)偵聽新的連接請(qǐng)求,而新的請(qǐng)求可以通過 accept()函數(shù)的再一次笤俑而獲得接受??梢詫⑾⑻幚砗瘮?shù)想象成一個(gè)漏斗,如圖所示。 //會(huì)話標(biāo)志 GUID guidlnstance。 //當(dāng)前玩家數(shù) WCHAR *pwszSessionName。 //未使用 PVOID pvApplicationReservedData。 游戲碰撞檢測(cè) 在游戲中,大多數(shù)角色并不是超級(jí)英雄,所以他們并不能穿透墻壁。出于這個(gè)原因,必須告之相交點(diǎn)是否位于多邊形的邊緣之內(nèi),而完成之一點(diǎn)有點(diǎn)難度。vecDir, amp。vecDir, amp。v, amp。 else { if(Length != NULL) *Length = Dist。 客戶日方面的性能指標(biāo)考量,客戶端在進(jìn)行大規(guī)模 PK 戰(zhàn)斗時(shí)候是否會(huì)出現(xiàn)位置 bug,在進(jìn)行大規(guī)模渲染時(shí)是否會(huì)造成客戶端軟件或者系統(tǒng)崩潰重新啟動(dòng)。那些額外的代碼都是用來支持調(diào)試的。 在 C++中聲明可以出現(xiàn)在程序的任何位置。 2. 使我們有機(jī)會(huì)通過用初始化取代賦值來達(dá)到性能的提升,從前聲明只能放在開頭,然 而往往開始的時(shí)候我們還沒有獲得我們想要的值,因此初始化所帶來的好處就無法被應(yīng)用。 碰撞檢測(cè)優(yōu)化 為了優(yōu)化 CheckSphereIntersect 功能函數(shù),可以在功能函數(shù)調(diào)用的代碼中不使用 sqrt,而是自己編寫函數(shù),計(jì)算兩者間距離公式 距離 = X*X+Y*Y+Z*Z,然后計(jì)算球半徑距離公式 球半徑 = (Radius1 + Radius2)*( Radius1 + Radius2)* 最后在判斷兩者。所以經(jīng)過反復(fù)思量,采用消息事件 的方法處理鍵盤事件。 SendNetworkMessage(amp。 在為優(yōu)化前客戶端加載資源速度比較慢,而且容易出現(xiàn)漏加載,客戶端體積很大。 所以要從根本上處理這個(gè)問題還是要采取兩個(gè)辦法: 把所有的可能作弊的動(dòng)作全部轉(zhuǎn)移到服務(wù)器段來運(yùn)行,使作弊者無法得到數(shù)。 6. 其他處理 游戲防盜版 數(shù)據(jù)發(fā)送到運(yùn)營商的服務(wù)器里的,通過這些數(shù)據(jù)就能知道 玩家 是不是做了違反游戲公平的事情了 ,比如說是刷 BUG, 玩家 的位置數(shù)據(jù)不變,但是,其他的經(jīng)驗(yàn)值,經(jīng)驗(yàn)之類的數(shù)據(jù)卻異常暴增,工作人員查起來就能很明顯得看出來 游戲防外掛 如今市場(chǎng)上流行的外掛無外乎兩類: 輔助型外掛, 作弊型外掛。 動(dòng)畫渲染優(yōu)化 對(duì)于使用 DirectX 進(jìn)行動(dòng)畫渲染,基本上以及沒有優(yōu)化可以,基本上都是使用微軟的API,我們能優(yōu)化的就只有自己的代碼,減少代碼的編寫重復(fù)率。 //MoveAction 收到響應(yīng)是消息夠經(jīng)過處理 if(MoveAction != LastMove) 第 28 頁 共 30 頁 sStateChangeMessage Msg。這樣做會(huì)導(dǎo)致進(jìn)行游戲時(shí)候鍵盤會(huì)有被占鍵的 BUG,導(dǎo)致角色失控。 通信機(jī)制優(yōu)化 該實(shí)現(xiàn)由于是多個(gè)客戶端與服務(wù)端使用網(wǎng)絡(luò)通迅,因此數(shù)據(jù)包裝定義采用了類似windows 的消息機(jī)制,這種通行對(duì)于流量來說比較少能提高服務(wù)端的壓力,而客戶端不易出現(xiàn)延時(shí)情況。這樣做可以有兩個(gè)好處: 1. 確保了對(duì)象在它被使用前不會(huì)被程序的其他部分惡意修改。同樣,對(duì) postfix 和prefix 運(yùn)算符的選擇也會(huì)影響性能。然后當(dāng)你做了這件 第 27 頁 共 30 頁 事情的時(shí)候切忌從 debugversion 進(jìn)行推斷,因?yàn)?debugversion 中包含了許多額外的代碼。服務(wù)器是否能進(jìn)行 150 人線同時(shí) PK考量。 if(Hit == TRUE) { Size = (float)sqrt(XDiff*XDiff+YDiff*YDiff+ZDiff*ZDiff)。FaceIndex, amp。 D3DXIntersect(m_Meshm_Mesh,amp。他是一個(gè)非常有用的功能函數(shù)。 為了 檢測(cè)一個(gè)多邊形是否堵塞了節(jié)點(diǎn)之間的道路,可以在兩個(gè)點(diǎn)之間“發(fā)射”出一條想象中的射線,以檢測(cè)它是否與一個(gè)平面相交。 //0 }DPN_APPLICATION_DESC。 //會(huì)話密碼(如果有的話) 第 26 頁 共 30 頁 PVOID pvReservedData。 //設(shè)置應(yīng)用程序 GUID DWORD dwMaxPlayers。這些信息包含在一個(gè)個(gè)體結(jié)構(gòu)中:
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1