想要自己做一款遊戲,需要學習哪些知識?

語言: CN / TW / HK
自制網遊星際逮蝦户4人對戰視頻

本來想花幾個月好好做一個能看的二刺螈軟萌風搓狐狸的遊戲再來逼乎吹一吹,奈何最近忙着煉丹沒時間搗鼓,上面這個是一個多人在線網遊,雖然只是個用於測試引擎的美術兩小時搞完的demo版本,但麻雀雖小五臟俱全,目前已經在github完整開源,過段時間不咕的話會移植到Android端。

這款遊戲的實現相當相當底層

1-首先語言選定為c語言,完成一個內存池,實現內存的分配釋放,這裏主要問題是內存的分配和釋放效率問題和減少內存碎片,實現基礎的數學函數例如sin cos sqrt log等,這裏涉及一些數學知識 不過總體並不算太複雜。

DBinary:PainterEngine 內存池實現與細節

2-現在代碼完全獨立於平台,不依賴任何三分庫和標準庫,在此基礎上完成顏色,向量和矩陣的一系列封裝,然後完成基礎數據結構string,list,vector,map,queue這裏可以參考標準庫的實現例如map可以採用紅黑樹,總體而言不算太複雜,大部分是體力活。

3-完成一些常用的算法,例如信號處理相關的dft fft dwt 各類window及filter,密碼相關的AES Curve25519 sha256 ,四叉樹,kd樹,聲音混音器...不是所有都用的上,有些可以直接上手開幹,有些理論較為深奧例如密碼學那塊的,可以上github上找ms,Google,apple一些大廠的開源代碼改改移植過來

4-完成編寫渲染器前的一些基本工作,例如定義顏色格式,封裝render surface,texture,vertex等數據結構,現在可以開始實現軟渲染器了,可以先從一些簡單的幾何圖形光柵化開始,線,矩形,圓,扇形,三角形,如果不做反走樣的光柵化都挺簡單的,但如果是考慮渲染效率的反走樣光柵化,就完全不是一個難度了,同時完成一些基礎常用圖形格式的解析例如bmp位圖,自己創建了一種帶透明通道的圖片格式traw,由png轉換得到。

5-完成透視投影變換,紋理映射引出VS及PS接口,完成一個3d軟渲染器,需要一些圖形學的基礎,但這部分聽上去高大上,完成起來並沒用想象中那麼複雜,因為不是主要用途,所以在實現一些簡易動畫上基本湊活夠用了。

6-開始設計一門編譯型腳本語言,構思其基本語法,實現詞法和語法分析,然後開發編譯器,虛擬機(帶調試器),需要一些編譯原理的基礎,但真正用到的知識點並不多,主要是ast樹的構建,可以採用遞歸下降分析法,可以設計為定長指令,這樣虛擬機部分做起來難度小得多,一些核心算法完成後,主要還是堆語法糖之類的苦力活。

DBinary:從虛擬機架構到編譯器實現

7-現在可以開始設計遊戲引擎了,一個對象管理器方面的內容,一個遊戲對象基本可以用initialize update render三部分組成,另外最大的難點應該是一個較為通用的碰撞檢測實現,另外就是對象的創建,銷燬,回收 這部分與腳本引擎對接,引出接口便於遊戲拓展。

8-在上面的基礎上,完成資源管理器,包括紋理,音頻,腳本資源,文本資源...進一步設計動畫管理器,粒子系統,音頻管理器,編寫tools以編輯資源

9-設計網絡同步協議(幀同步),主要是處理延遲平滑,斷線重連等問題

10-依據以上游戲引擎,繪製遊戲的圖片資源,設計遊戲Object的邏輯處理代碼,加載資源,並編寫單機DEMO

DBinary:PainterEngine打造獨立遊戲

11-編寫遊戲服務器,包括遊戲大廳客户端,遊戲大廳服務端,遊戲實例客户端,遊戲實例服務端,建立數據庫管理系統,使用Curve25519+AES建立數據的安全連接.

12-編寫平台兼容層代碼,渲染renderbuffer並播放混音合成的PCM音頻流,最後測試遊戲,發佈

開源地址:

matrixcascade/PainterEngine-Game

遊戲的網站服務端:

http:// pan.baidu.com/s/1h5aBmC fizWNj7FTSv4cJ7A

提取碼:ue5w

來源:知乎 www.zhihu.com

作者:DBinary

【知乎日報】千萬用户的選擇,做朋友圈裏的新鮮事分享大牛。點擊下載

此問題還有81 個回答,查看全部。

延伸閲讀:

怎樣成為一個遊戲策劃,需要哪些知識和技能?

學習3d遊戲開發需要什麼知識和技能?