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

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

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

[復(fù)制鏈接]
樓主
發(fā)表于 2020-4-25 14:28:29 | 只看該作者 |只看大圖 |倒序?yàn)g覽 |閱讀模式
游戲代碼也寫了幾年,, 有時(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ā)
發(fā)表于 2020-6-9 19:57:40 | 只看該作者
每一發(fā)奮努力的背后,,必有加倍的賞賜,。
板凳
發(fā)表于 2020-6-20 01:40:33 | 只看該作者
感恩是一種處世哲學(xué),感恩是一種生活智慧,,感恩更是學(xué)會(huì)做人,,成就陽光人生的支點(diǎn)。
地板
發(fā)表于 2020-6-20 05:52:33 | 只看該作者
666666
5#
發(fā)表于 2022-9-9 09:39:21 | 只看該作者
感恩是一種處世哲學(xué),,感恩是一種生活智慧

3級(jí)

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

本版積分規(guī)則

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

GMT+8, 2025-2-2 20:15 , Processed in 0.153270 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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