?? mmorpg開發入門.txt
字號:
技術文檔(Document)
來自:17173
MMORPG開發入門
-------------------------------------------------------------------
文章的中心是如何起步開發你自己的大型多人在線角色扮演游戲( 原文:Massive Multiplayer Online Role Playing Games) (MMORPG)(譯者注:俗稱:網絡游戲,網游)。針對的讀者是經驗和資源有限的開發者。 讀完文章之后,你應該懂得如何起步, 還有一些關于什么是應該做的和不應該做的忠告。第一步是評估你的能力和資源。你必須對自己誠實,因為做你力不從心的事情會浪費你的時間并讓你心灰意冷。
第一步:評估你的能力
必須的技能:
懂至少一種編程語言。 迄今為止, C++因為性能和效率的優越性成為游戲開發者的首選。 Visual Basic, Java 或者 C# 可能也是不錯的選擇;
熟悉一種圖形庫。通常的選擇是SDL, OpenGL, 或者DX/D3D。(譯者注:網上也有很多免費/付費引擎下載和出售);
選擇一種網絡通訊庫。 你可以從WinSock, SDL_net, 或DirectPlay中選擇。(譯者注:很多人喜歡開發自己獨特的網絡庫,這并不復雜,似乎ACE也是一種選擇);
對游戲開發有大體的經驗。例如,事件循環,多線程,GUI 設計,等等。
強烈推薦的技能:
C/S結構通訊;
多平臺開發。 你可能希望設計一個MMORPG, 尤其是服務器能運行在多種操作系統。為此,我推薦使用SDL, OpenGL 和SDL_net;
網站開發。如果你想讓用戶通過網站查看玩家統計,服務器信息和其他信息,這是必須的。(譯者注:其實網站可以交給其他人開發,如果有必要的話);
安全管理。你當然不想因為有人攻擊你的服務器而浪費時間!
團隊組織能力。 你需要一個你能成功領導和管理的團隊;
第二步:初步規劃
我注意到很多人在不同的論壇發帖子尋找團隊開發MMORPG。他們中的大部分是這樣:“我們成立了一個公司/游戲工作室,需要3個美工,兩個程序,1個音樂制作,等等。為了創新,不要看過去的MMORPG,你有全部的自由用來創造你想要的世界,等等。 我們會在項目完成并賺到錢的時候付給你酬勞,等等”。不幸的是,以現有的技術和帶寬,你無法擁有一個動態的世界。 朝向無法到達的目標前進只會導致失敗。正確的做法是拿出一些小規模的,功能性強的,可擴展的設計和構架。,
基本軟件構架
首先,嘗試創建一個簡單的C/S模型,有如下功能:
創建一個新角色;
保存那個角色(服務器端);
用那個角色登陸;
能夠和其他人交談;
能在3D空間游覽;
保存角色看起來簡單,其實不然。 例如,有兩種方式保存角色:使用數據庫服務或者使用文件。兩者有各自的優缺點:
請點擊查看詳細優缺點對比
現在你決定了如何存儲角色,你還得選擇C/S通訊的網絡協議:TCP 還是 UDP?,我們都知道TCP速度慢,但是更準確,并且需要額外帶寬。我實際使用TCP并沒有遇到什么問題。 如果你有充足的帶寬,TCP是個好選擇,至少對初學者是這樣。 UDP 會很麻煩,尤其是對新手。 記住,游戲或引擎的初步測試會在你的局域網進行,所有的包都會按順序依次抵達。在Internet上無法保證這一點。雖然包會按順序到達,但是有時候會丟包,這通常是個麻煩事。 當然,你可以設計你的協議使得C/S能夠從丟包中恢復。但這對初學者來說很痛苦,不值得推薦。
又是看起來很簡單,其實不然。你不能只是發送’’\0’’結尾的串。因為你需要一個通用的協議,能同時適用字符串和二進制數據。用0(或其他字符)做結束符是不明智的,因為那個結束符可能是你要發送的數據的一部分。此外,如果你發送20字節,然后再20字節,服務器極有可能收不到兩個20字節的包。取而代之的是,它會一次性收到40字節,為了避免浪費帶寬在不必要的頭上。 而且,你可以發送1KB的包,但服務器會以兩個小包的形式收到它。所以你必須知道哪里是一個包的開始,哪里是結束。在 “永恒大陸”(譯者注:原文: Eternal Lands,本文的作者正在開發的一款MMORPG)中,我們用如下的方法:
Offset 0: 1 字節 表示傳輸的命令;
Offset 1: 2 字節,傳輸的數據長度;
Offset 3: 變長,消息內容;
這種方法有一致的優點:所有的數據傳輸有統一的標準。缺點是有些命令有固定已知的長度,浪費了一些帶寬。以后我們會改成混合的方法。
下一件事是決定服務器模型: “非阻塞soket,不使用線程”,或者“阻塞soket,使用線程”。兩種方法(使用線程 vs 不使用線程)各有優缺點。
線程:
服務器響應會更加平滑,因為如果一個玩家需要大量時間(例如從數據庫中讀取數據),這會在它自己的線程中完成,不會影響其他人。(譯者注:也許作者的意思是每個玩家都有獨立的線程,但這對MMORPG不太現實);
難以恰當的實現和調試:你可能需要大量同步,并且一個小疏忽就會導致災難性的后果( 服務器癱瘓,物品復制,等等);
可以利用多處理器;
無線程:
實現和調試更簡單;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -