想要自己做一款遊戲,需要學習哪些知識?
本來想花幾個月好好做一個能看的二刺螈軟萌風搓狐狸的遊戲再來逼乎吹一吹,奈何最近忙著煉丹沒時間搗鼓,上面這個是一個多人線上網遊,雖然只是個用於測試引擎的美術兩小時搞完的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遊戲開發需要什麼知識和技能?