国产精品日韩无码,国产成人无码视频97,国产高清在线观看av不卡,国产无码h在线播放

 找回密碼
 立即注冊(cè)[Register]
本站已運(yùn)行: 感謝各位的支持!
查看: 3080|回復(fù): 5

萌新必讀!游戲編程入門指南

[復(fù)制鏈接]

11

主題

0

回帖

671

積分

2級(jí)

積分
671
樓主
發(fā)表于 2020-4-25 14:28:29 | 只看該作者 |只看大圖 |倒序?yàn)g覽 |閱讀模式

你還沒有登入哦~

您需要 登錄 才可以下載或查看,沒有賬號(hào)?立即注冊(cè)[Register]

×
游戲代碼也寫了幾年, 有時(shí)候在想如果現(xiàn)在給剛?cè)胄械淖约阂稽c(diǎn)建議也許能有一點(diǎn)幫助。所以這篇主要是分享一下自己對(duì)于游戲編程入門的一些想法。希望對(duì)你有幫助!



語言的選擇

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

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

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

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

而 C 語言(包含 C++)可以放在后續(xù)研究,研究 C 語言可以對(duì)語言底層點(diǎn)的東西理解。像指針可以讓你直接訪問內(nèi)存,這在其他語言中是很少見。可能一般感受不出來它的力量,但當(dāng)你面對(duì)資源緊張的系統(tǒng)(需要手動(dòng)內(nèi)存管理),比如 GBA 和 NDS 上面的編程時(shí)候就繞不開 C 語言甚至匯編語言了。

一定要多動(dòng)手

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

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

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

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

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


不要執(zhí)著于 Opengl

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

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

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

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

不要禁錮在游戲引擎中

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注意代碼整潔

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

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

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




上一篇:為了您的賬號(hào)安全,請(qǐng)驗(yàn)證綁定郵箱!
下一篇:【緊急公告】html文件VBScriptruch蠕蟲病毒解決方法
回復(fù)

使用道具 舉報(bào)

0

主題

45

回帖

945

積分

2級(jí)

積分
945
沙發(fā)
發(fā)表于 2020-6-9 19:57:40 | 只看該作者
每一發(fā)奮努力的背后,必有加倍的賞賜。
回復(fù)

使用道具 舉報(bào)

0

主題

34

回帖

824

積分

2級(jí)

積分
824
板凳
發(fā)表于 2020-6-20 01:40:33 | 只看該作者
感恩是一種處世哲學(xué),感恩是一種生活智慧,感恩更是學(xué)會(huì)做人,成就陽光人生的支點(diǎn)。
回復(fù)

使用道具 舉報(bào)

0

主題

42

回帖

962

積分

2級(jí)

積分
962
地板
發(fā)表于 2020-6-20 05:52:33 | 只看該作者
666666
回復(fù)

使用道具 舉報(bào)

0

主題

50

回帖

571

積分

2級(jí)

積分
571
5#
發(fā)表于 2022-9-9 09:39:21 | 只看該作者
感恩是一種處世哲學(xué),感恩是一種生活智慧
回復(fù)

使用道具 舉報(bào)

0

主題

34

回帖

1595

積分

3級(jí)

積分
1595
6#
發(fā)表于 2022-12-11 17:31:54 | 只看該作者
刷·······························
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|藏寶灣 |網(wǎng)站地圖

GMT+8, 2025-10-28 10:09

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復(fù) 返回頂部 返回列表