久久精品国产亚洲不AV麻豆_久久精品无码一区二区WWW_久久精品亚洲AV熟女_久久久久久精品成人鲁丝电影_久久久噜噜噜久久_久久乐国产精品亚洲综合_久久亚洲欧美国产精品_久青草久青草视频在线观看_麻花豆传媒剧国产免费MV_女邻居丰满的奶水在线观看,欧美日韩在线观看精品一区二区,无码精品人妻一区二区三区中,国产精品亚洲成在人线

藏寶灣

標(biāo)題: 萌新必讀!游戲編程入門指南 [打印本頁]

作者: 閃閃的星仔    時間: 2020-4-25 14:28
標(biāo)題: 萌新必讀,!游戲編程入門指南
游戲代碼也寫了幾年,, 有時候在想如果現(xiàn)在給剛?cè)胄械淖约阂稽c(diǎn)建議也許能有一點(diǎn)幫助。所以這篇主要是分享一下自己對于游戲編程入門的一些想法,。希望對你有幫助,!

()

語言的選擇

在一開始更多是推薦從高級語言入門,比如 Java,、C#,、lua、python,,javascript,。在這個時期可以配合一些游戲引擎來學(xué)習(xí),如果你是因?yàn)橄矚g游戲才學(xué)習(xí)編程的可能不喜歡老是 print 一些文字,,可能更喜歡輸出圖片,。

可以直接從對應(yīng)語言的游戲引擎開始做幾個小 Demo 了解一下游戲構(gòu)造,但是游戲引擎有個弊端就是 API 太多入門有點(diǎn)難……

游戲引擎的優(yōu)點(diǎn)是做游戲會比較快,,但是引擎整體還是略龐大,,不適合學(xué)習(xí)代碼之用。

之后可以使用 pico-8,、love2d,、pygame,、SDL 或者直接 javascript 操作 canvas 畫布來制作嘗試制作游戲挑戰(zhàn)自己編程能力。

而 C 語言(包含 C++)可以放在后續(xù)研究,,研究 C 語言可以對語言底層點(diǎn)的東西理解,。像指針可以讓你直接訪問內(nèi)存,這在其他語言中是很少見,??赡芤话愀惺懿怀鰜硭牧α浚?dāng)你面對資源緊張的系統(tǒng)(需要手動內(nèi)存管理),,比如 GBA 和 NDS 上面的編程時候就繞不開 C 語言甚至匯編語言了,。

一定要多動手

我在沒學(xué)習(xí)編程之前是個愛看書的小青年。所以在我剛開始學(xué)習(xí)寫代碼時候常常就一直看書沒有實(shí)踐,,有些東西看似懂了,,實(shí)際還是要上手操作才能掌握透徹。

在著手寫代碼時候最好是帶著問題去學(xué)習(xí),,編程其實(shí)就是把復(fù)雜問題分解,。比如在制作一個小 Demo 時候可以考慮這幾個問題:

如何顯示一個圖片/精靈
如何播放幀動畫
如何控制兩個物體碰撞
兩個物體碰撞時候銷毀其中一個同時生成一個物體播放幀動畫特效然后播放完成之后銷毀
如何播放音樂音效
背景層滾動效果怎么做
如何處理存檔(數(shù)據(jù)持久化)

而之后可以考慮的問題可能有:

精靈的顯示如何分清楚哪個先渲染哪個后渲染(渲染層次)
每次播放特效都生成一個物體然后銷毀是不是有點(diǎn)浪費(fèi)內(nèi)存,可不可以一次生成多個重復(fù)利用(引入了對象池)
存檔時候如果 A 寫入存檔還沒結(jié)束時候 B 又寫入存檔會不會出問題(引入了文件系統(tǒng)使用單例)


不要執(zhí)著于 Opengl

游戲行業(yè)比較流行圖形學(xué),,可能感覺起來高達(dá)上,,但是對于初學(xué)者(非初學(xué)者其實(shí)也一樣)來說更多還是應(yīng)該專注于 GamePlay。

我在剛開始寫代碼沒多久就跑去拿本 opengl 紅寶書在啃,,寫了一堆代碼到頭來也沒學(xué)到什么,。

一開始不要考慮3D 方面東西,從簡單的2d 開始比較不錯,。這個時候我更多推薦看下代碼本色和游戲人工智能來鍛煉一下代碼能力,。

甚至如果要學(xué)圖形學(xué) Shader 的,我更多建議是先直接用 Unity 上面先學(xué)習(xí)如何寫一些 Shader(推薦Unity 著色器和屏幕特效開發(fā)秘笈),,能寫一些比較特效之后然后再回頭去寫那些渲染管線 Opengl 那些會比較有感觸,。

不要禁錮在游戲引擎中

現(xiàn)在游戲引擎非常方便,寫軟件的目的就是為了使其越來越容易使用,。

但一直使用游戲引擎對于初學(xué)編程的人來說會比較難以提高編程水平,。個人建議是可以從先從游戲引擎入門,然后嘗試不使用引擎使用上面提到一些底層點(diǎn)的框架或者工具來制作游戲,。

造點(diǎn)小輪子有助于提高

很多人都說不要重復(fù)造輪子,,但有時候別人的輪子比較重量級不夠輕。自己寫點(diǎn)適合自己的輕量級的輪子也對自己編程能力有一定提高,,也可以更多享受編程的樂趣,。

比如用上文提到的比較底層的框架(比如 SDL)來游戲制作然后自己寫個簡單的地圖編輯器、粒子系統(tǒng)、存檔文件保存讀取系統(tǒng)或者菜單系統(tǒng),。雖然你做的這個跟專業(yè)引擎制作的沒法比,,但有一天你回到引擎里再來看待一些問題會有不一樣的解決思路。

注意數(shù)據(jù)結(jié)構(gòu)的應(yīng)用

數(shù)據(jù)結(jié)構(gòu)剛學(xué)習(xí)時候會陷入這東西在游戲開發(fā)中能干什么的疑惑之中,。除了比較常見尋路用到圖和網(wǎng)絡(luò)編程的消息隊列,,其他的在我一開始學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)時候都一無所知。

堆棧的應(yīng)用:在處理菜單時候比如進(jìn)入設(shè)置菜單時候把新菜單壓棧操作,,返回時候出棧銷毀即可,。在游戲場景進(jìn)入到一個房間時候可以把當(dāng)前游戲場景暫停然后把新的房間場景壓棧。

隊列的應(yīng)用:在一些需要緩沖輸入時候(比如格斗游戲)可以使用隊列來控制輸入操作,。在一些技能系統(tǒng)比如一回合有8個體力槽玩家來組合攻擊,。在制作回放系統(tǒng)時候也可以使用隊列來制作。

樹的應(yīng)用:基本是當(dāng)你需要面對分支而且每個分支都有分支時候需要考慮,。典型的比如劇情或者對話樹,在節(jié)點(diǎn)下有很多子物體,,子物體又可以有很多子物體時候也是它的應(yīng)用場景,。

圖的應(yīng)用:在可視化流程控制,有限狀態(tài)機(jī)和導(dǎo)航系統(tǒng)都可以找到它的影子,。

游戲開發(fā)設(shè)計模式應(yīng)用

這個其實(shí)有專門書籍進(jìn)行闡述,, 我也只是班門弄斧而已 ,我只談?wù)搸讉€對于我初學(xué)時候比較有收獲的,。

單例模式:在很多人剛開始接觸游戲引擎時候都會面臨一個問題是場景切換不銷毀數(shù)據(jù),,不推薦的做法也是一些初學(xué)者會犯的是把數(shù)據(jù)保存到本地,然后下個場景再讀取,。這種直接進(jìn)行讀寫操作是不可取而且當(dāng)你要保存的是一個游戲?qū)ο螅℅ameObject)時候就沒辦法了(當(dāng)然其實(shí)也可以序列化對象保存到本地但仍然不可?。_@個時候比較可取的就是保存到一個全局的靜態(tài)對象/變量上,,這就引入了單例模式,。還有比如一些系統(tǒng)只能有一個入口不允許隨便使用不然會出錯,比如典型的文件 IO 和控制器輸入控制,。

數(shù)據(jù)驅(qū)動:在 Unity 的 ScriptObject 中明顯就是數(shù)據(jù)驅(qū)動,,其核心思想就是改動數(shù)據(jù)而不必改動代碼。而當(dāng)你要使用數(shù)據(jù)驅(qū)動時候一定要分清楚什么可以硬編碼什么可以數(shù)據(jù)驅(qū)動,,配置太多的話是很影響開發(fā)效率和可閱讀性,。

降低指針跳轉(zhuǎn)消耗:我覺得這個也是 ECS 提出的原因之一,在大型游戲中面對的是巨量的游戲物體,,這個時候游戲物體中又有各種指針跳轉(zhuǎn)的話造成的性能消耗就不能忽視了,。所以在寫代碼時候要注意降低指針跳轉(zhuǎn),盡量讓內(nèi)存連續(xù)分布,比如使用結(jié)構(gòu)體和數(shù)組,。當(dāng)然內(nèi)存連續(xù)分布也可以減少內(nèi)存碎片,。

原型模式:這個一開始好像是在 Cocos2d-x 里面看到過,一個接口來實(shí)現(xiàn)克隆當(dāng)前對象,。在實(shí)際游戲中其實(shí)也挺常見,,比如 GBA 的木葉戰(zhàn)記中,鳴人使用影分身可以生成一個新的人物但是攻擊力和血量減半,。在 Unity 中 Prefab 從 Project 窗口拖動到 Scene 中時候也是使用類似思路(應(yīng)該吧),。

注意代碼整潔

這個更多是經(jīng)驗(yàn)性的東西,我也難說做得很好,。保持代碼可讀性是為了日后你或者別人回來看代碼能看得懂,。保持函數(shù)的單一職責(zé)很有必要,當(dāng)你發(fā)現(xiàn)有些代碼重復(fù)寫了幾次就應(yīng)該思考這是否應(yīng)該放到一個函數(shù)中,。你必須明白的是 Bug 總是會有的,,總有一天你或者別人會重新看這些代碼,如果在寫的時候稍加注意,,后期的維護(hù)和復(fù)用就會相對簡單輕松,。

具體可以看下代碼大全、代碼整潔之道和這個視頻,。

最后,,制作游戲很有趣,寫游戲代碼也很開心,,希望你也能享受游戲編程的快樂,!

作者: 楚一帆    時間: 2020-6-9 19:57
每一發(fā)奮努力的背后,必有加倍的賞賜,。
作者: 123456833    時間: 2020-6-20 01:40
感恩是一種處世哲學(xué),,感恩是一種生活智慧,感恩更是學(xué)會做人,,成就陽光人生的支點(diǎn),。
作者: 123456819    時間: 2020-6-20 05:52
666666
作者: sendary3318    時間: 2022-9-9 09:39
感恩是一種處世哲學(xué),感恩是一種生活智慧
作者: stone66    時間: 2022-12-11 17:31
刷·······························




歡迎光臨 藏寶灣 (http://wuyouzp.com/) Powered by Discuz! X3.5