地址:長(zhǎng)沙市天心區(qū)雀園路568號(hào)創(chuàng)谷主樓2樓天心文化(廣告)產(chǎn)業(yè)園
電話:0731-85137865
郵箱:gongxin@www.wzwhfm.com

對(duì)游戲編程感興趣或是想自己做游戲的人可以參考一下~
我是一個(gè)獨(dú)立游戲開(kāi)發(fā)者,在一個(gè)主機(jī)獨(dú)立游戲開(kāi)發(fā)團(tuán)隊(duì)里做主程。大學(xué)畢業(yè) 10 年,畢業(yè)以后就一直在做游戲編程,從一開(kāi)始的“端游”,到頁(yè)游,再到手游,到現(xiàn)在的主機(jī)獨(dú)立游戲,也算是有一些經(jīng)驗(yàn)了。
在這些年里見(jiàn)過(guò)挺多想了解“游戲是怎么做的”的人,也有挺多對(duì)游戲編程感興趣的人。這些人里,有行業(yè)外的人,也有行業(yè)內(nèi)的非程序員。我希望通過(guò)在這里寫(xiě)一篇文章的方式,向大家推薦一個(gè)資料,傳授點(diǎn)兒方法,希望對(duì)大家有所幫助。
但是有一個(gè)事情我覺(jué)得大家需要先想清楚:你是哪種人?
想要確定你自己是哪種人,首先需要問(wèn)自己幾個(gè)問(wèn)題:
之后我會(huì)針對(duì)這三種讀者提出相對(duì)應(yīng)的建議。不過(guò)首先,有一些東西是共通的,我認(rèn)為所有人都應(yīng)該盡可能掌握的幾個(gè)技能。
最重要的 3 個(gè)技能
其實(shí)下面列的這些技能,就一個(gè)目的:掌握第一手的高質(zhì)量資料。然而由于各種各樣的原因,高質(zhì)量資料在國(guó)內(nèi)并不多,第一手就再甭提了,所以我們需要在全世界尋找這些資料,于是我們就需要去 Google 搜索資料。
英語(yǔ)
我接觸過(guò)很多英語(yǔ)不好的朋友,說(shuō)他們?cè)谏蠈W(xué)的時(shí)候就對(duì)英語(yǔ)產(chǎn)生了抵觸,看見(jiàn)英語(yǔ)就頭疼。還有的人說(shuō),雖然不至于到看見(jiàn)就頭疼的程度,但是單詞背不下來(lái),口語(yǔ)就更慘了。那我在這里就傳授一下我是怎么學(xué)英語(yǔ)的。
先說(shuō)清一點(diǎn),這里說(shuō)的英語(yǔ)技能僅包含“聽(tīng)說(shuō)讀寫(xiě)”中的“讀”。因?yàn)檫@整件事的目的就是看資料,所以“讀”就夠了。
首先,先放下心理負(fù)擔(dān)。很多人看到英語(yǔ)就頭疼可能是因?yàn)闈撘庾R(shí)里他們看到英語(yǔ)就聯(lián)想到了考試,聯(lián)想到了可怕的英語(yǔ)考試和自己悲慘的英語(yǔ)成績(jī),聯(lián)想到了看到成績(jī)后生氣的父母,聯(lián)想到了。哦,總之,先不要怕,你讀一篇英文文章,并不是為了考試,也沒(méi)有人讓你在讀的時(shí)候不許查詞典,沒(méi)讀懂也不會(huì)有人罵你。你想想,多少游戲那么難,你不都打通了么,讀個(gè)文章比打《血源詛咒》簡(jiǎn)單多了~
其次,
不要背單詞!
不要背單詞!
不要背單詞!
重要的事情說(shuō)三遍!
背單詞可能是很多人的痛苦記憶。我個(gè)人認(rèn)為,背單詞這個(gè)方式一是為了考試,二是為了“速成”。這個(gè)“速成”并不是貶義。背單詞對(duì)于語(yǔ)言來(lái)說(shuō)的確是一種比較高效的方式,如果你不抵觸的話。如果背單詞已經(jīng)讓你產(chǎn)生抵觸情緒了,那它本身意義就不那么大了。但是不背單詞的話,怎么提高詞匯量呢?我的答案是:愣特么看。
我來(lái)解釋一下什么叫“愣特么看”。很簡(jiǎn)單,利用專業(yè)英語(yǔ)本身詞匯量就比較少這個(gè)點(diǎn),每次你看到一個(gè)生詞的時(shí)候,去查一下詞典,就知道是什么意思了對(duì)吧,然后你就繼續(xù)看文章就成了。直到下一次你遇到這個(gè)詞的時(shí)候,你還是不記得這詞是什么意思,沒(méi)事兒,再查一次,哦,是這個(gè)意思,繼續(xù)看文章。
這方法簡(jiǎn)單到都不應(yīng)該被稱為是一個(gè)“方法”,但我的邏輯是,如果一個(gè)詞出現(xiàn)的頻率低到你只查了一兩次,根本記不住,那說(shuō)明,它可能在現(xiàn)在的階段根本不值得你把它記下來(lái);相反,如果一個(gè)詞已經(jīng)出現(xiàn)的頻率已經(jīng)高到你查了 N 次詞典,那你差不多也已經(jīng)把它背下來(lái)了。這個(gè)方法的重點(diǎn)其實(shí)是,看大量的英文內(nèi)容,讓你一遍又一遍的鞏固這些經(jīng)常出現(xiàn)的詞,從而記住它們。把自己的手機(jī)、PS4 換成英文系統(tǒng),想解悶兒去看 Reddit 或者 9GAG,想看圖去 Instagram,想看新消息去 Twitter,想看視頻去看 YouTube,想看直播去 Twitch,想看 ** 去 PxxxHxx??傊褪怯糜⑽陌鼑愕纳?,慢慢你就適應(yīng)了~
試試吧,這個(gè)方法在我那個(gè)看英語(yǔ)就頭疼、四級(jí)都過(guò)不了的老婆身上親測(cè)有效。
搜索
搜索大概是這個(gè)信息時(shí)代的特色了。使用搜索引擎的方法對(duì)開(kāi)發(fā)效率的影響簡(jiǎn)直是數(shù)量級(jí)上的區(qū)別。有一次我老婆鼠標(biāo)驅(qū)動(dòng)出了一些問(wèn)題,也 Google 了一下,但折騰了一個(gè)多小時(shí)找不到解決方法,后來(lái)我改了改搜索的關(guān)鍵詞,5 分鐘就搞定了。差別實(shí)在是大。
然后,多看 Wikipedia,可以體驗(yàn)到在知識(shí)的海洋里遨游的感覺(jué)。一個(gè)詞你不明白的時(shí)候,先去搜 Wikipedia,盡量看英文的。
科普模式(簡(jiǎn)單)
對(duì)于只是想了解游戲是怎么跑起來(lái)的人,其實(shí)是不需要真正接觸編程的。你需要的只是去看一些科普向的視頻或者文章,比如卡姐Cara翻譯的視頻,還有卡姐那些視頻的來(lái)源??ń惚容^好的一點(diǎn)是,每個(gè)視頻下面會(huì)詳細(xì)寫(xiě)清轉(zhuǎn)載的出處,能看生肉的話,直接看源視頻更鍛煉英語(yǔ)。
另外機(jī)核上也有一些科普的文章,我之后也可能會(huì)寫(xiě)一些,看看這些文章就好啦~
愛(ài)好者模式(普通)
到這個(gè)級(jí)別,你還是要想明白,你的“了解”一下編程是“了解”到什么程度?必須要自己寫(xiě)寫(xiě)代碼嗎?還是只要明白程序上的一些基本概念就可以了?
如果你想自己寫(xiě)寫(xiě)代碼的話
個(gè)人推薦零基礎(chǔ)的朋友上手編程學(xué) Python??梢钥纯催@本《深入淺出程序設(shè)計(jì)》(英文名:Head First Programming),書(shū)里用很生動(dòng)的語(yǔ)言講了 Python 的基礎(chǔ)知識(shí),非常適合零基礎(chǔ)的朋友上手。
等你對(duì) Python 了解了以后,可以學(xué)學(xué) C#,再搞搞 Unity。這個(gè)部分我反而不是很了解,因?yàn)槲覍W(xué) C# 和 Unity 都太早了,而且都是會(huì)了 C++ 以后學(xué)的,所以這個(gè)路線不是很熟悉,見(jiàn)諒。
如果你只想明白編程上的一些基礎(chǔ)概念
推薦 Zachtronics 的游戲,42 曾經(jīng)介紹過(guò)。玩了這些游戲,就可以對(duì)編程這件事有一些感性認(rèn)識(shí)了~
職業(yè)模式(困難)
說(shuō)明:對(duì)于編程語(yǔ)言的選擇各有見(jiàn)解,此處的推薦僅代表作者個(gè)人意見(jiàn)。
在這里,我想跟所有想把游戲編程當(dāng)作職業(yè)的人說(shuō):游戲編程的確很難,學(xué)業(yè)曲線比較陡,在最開(kāi)始學(xué)的時(shí)候一定不要浮躁,不要急功近利,穩(wěn)扎穩(wěn)打才是精髓。
好,那且聽(tīng)我慢慢道來(lái)。應(yīng)該學(xué)什么編程語(yǔ)言?我推薦C++。
現(xiàn)在 Unity 那么火,為什么不學(xué) C#?首先,在主機(jī)游戲的領(lǐng)域,C++ 是完全的霸主地位,不用 C++ 的 3A 大廠幾乎沒(méi)有。另外,了解底層知識(shí)是非常重要的,C++ 是可以手動(dòng)管理內(nèi)存的。手動(dòng)管理內(nèi)存這件事情在游戲開(kāi)發(fā)領(lǐng)域是非常重要的。就算你用了 Unity,寫(xiě)了 C#,資源加載卸載仍然是一個(gè)比較手動(dòng)的過(guò)程,你可以先在 C++ 里適應(yīng)這種做法。
我當(dāng)年學(xué) C++ 用的是這本《21 天學(xué)通 C++》,現(xiàn)在已經(jīng)出到第 8 版了。不要被書(shū)名誤導(dǎo),你不用 21 天之內(nèi)學(xué)完。慢慢看,慢慢學(xué)。關(guān)于編程的方法,下面有專門(mén)的一段會(huì)講到,在這里就不贅述了。
游戲編程的特點(diǎn)
如果你是個(gè)其它領(lǐng)域的程序員,但希望可以轉(zhuǎn)向從事游戲開(kāi)發(fā),那么就需要注意一下游戲開(kāi)發(fā)的特點(diǎn):極其追求運(yùn)行效率。我個(gè)人感覺(jué),Donald Knuth 那句“Premature optimization is the root of all evil”在游戲開(kāi)發(fā)領(lǐng)域甚至都不適用。
對(duì)于底層知識(shí),首先得看一些大塊頭的書(shū),比如:
《游戲引擎架構(gòu)》
《游戲編程權(quán)威指南》
《Realtime Rendering》
另外,我還有一些推薦的做法:把標(biāo)準(zhǔn)庫(kù)的一些內(nèi)容自己寫(xiě)一遍。我大學(xué)的時(shí)候把 。NET Framework 里的 System.Collections.Generic 中的容器在 C++ 里重新實(shí)現(xiàn)了一遍,收獲真的很大,我推薦程序員們都去試試~
最后,我說(shuō)的底層真的要很底層,比如你要知道雖然遍歷數(shù)組和鏈表的時(shí)間復(fù)雜度都是 O(n),但由于鏈表在內(nèi)存中的存儲(chǔ)不連續(xù),所以無(wú)法完全利用 CPU 緩存,出現(xiàn) cache miss,導(dǎo)致實(shí)際上遍歷鏈表比遍歷數(shù)組慢。嗯,就是要底層到操作系統(tǒng)和硬件架構(gòu)的級(jí)別。
編程的掌握方法——如何自學(xué)?
我一直覺(jué)得,編程可能是全世界的職業(yè)技能里最好自學(xué)的了。因?yàn)榫幊踢@件事反饋非常準(zhǔn)確且及時(shí)。你編錯(cuò)了,就跑不起來(lái),或者跑出問(wèn)題;編對(duì)了,就沒(méi)問(wèn)題。但最開(kāi)始掌握編程的時(shí)候,還是可能走一些彎路,有兩個(gè)點(diǎn),我在這里先列出來(lái),大家繞著點(diǎn)兒走。
瘋狂看書(shū)不寫(xiě)代碼
這是很常見(jiàn)的問(wèn)題。大家在學(xué)校學(xué)知識(shí)的時(shí)候可能適應(yīng)了這種方式,就一直沿用下來(lái)了。然而在學(xué)編程的時(shí)候,我推薦大家學(xué)一點(diǎn)兒寫(xiě)一點(diǎn)兒。比如今天學(xué)了個(gè)條件判斷語(yǔ)句 if,那你就用這個(gè) if 寫(xiě)個(gè)程序出來(lái),跑起來(lái)看看是什么樣,邊學(xué)邊用才行。一定不能狂看書(shū)不寫(xiě)程序,哪怕有些語(yǔ)法你記不住,要邊查書(shū)邊寫(xiě),都比一直看不寫(xiě)強(qiáng)。否則的話,你在真正寫(xiě)代碼的時(shí)候記不住多少不說(shuō),你還會(huì)被編譯器的錯(cuò)誤信息搞懵,很容易被打擊。
不考慮代碼的可讀性
在學(xué)編程的時(shí)候,很多人經(jīng)常為了實(shí)現(xiàn)功能就不管代碼的可讀性了,寫(xiě)到最后代碼越來(lái)越長(zhǎng),也記不住之前定義的變量叫什么了,整個(gè)人都很煩躁。這是非常錯(cuò)誤的。
首先,先保證你的代碼格式整潔,縮進(jìn)對(duì)齊,該空格的地方空格。我大學(xué)的時(shí)候,有同學(xué)代碼調(diào)不出來(lái),讓我?guī)退恼{(diào)。我一看,代碼格式混亂,就讓他把縮進(jìn)對(duì)齊,該空格的地方空格,再來(lái)找我調(diào)。然后他就沒(méi)找我了,因?yàn)檎{(diào)完格式以后他自己就明白問(wèn)題在哪兒了。各種編程語(yǔ)言都提供了為你節(jié)省腦容量的功能,比如把一堆語(yǔ)句封成函數(shù),把一堆數(shù)據(jù)封成類或者結(jié)構(gòu)體,要用?。?
對(duì)于這個(gè)問(wèn)題,有個(gè)比較簡(jiǎn)單的評(píng)價(jià)方法,就是去看看你一個(gè)月以前寫(xiě)的代碼,看自己還能不能看懂。如果你看不懂,那說(shuō)明你一個(gè)月前的代碼的確可讀性有問(wèn)題。如果你還覺(jué)得看著你之前的代碼感覺(jué)有點(diǎn)兒惡心想吐,那說(shuō)明你在這一個(gè)月里進(jìn)步了,因?yàn)槟阒朗裁礃拥拇a惡心了。
團(tuán)隊(duì)合作的重要性
這一部分是我額外想多說(shuō)兩句的?,F(xiàn)在社會(huì)上對(duì)程序員的刻板印象一直都是不太說(shuō)話的理工男,但實(shí)際上,起碼在國(guó)外的程序員教育上,是非常強(qiáng)調(diào)溝通的重要性的。一個(gè)游戲,除非策劃程序美術(shù)全你一人搞定,否則你一定會(huì)面臨溝通的問(wèn)題。與人溝通的技巧已經(jīng)有無(wú)數(shù)文章和書(shū)在講了,我在這里就講兩個(gè)跟游戲開(kāi)發(fā)密切相關(guān)的點(diǎn)。
關(guān)于“程序員宗教”
應(yīng)該有不少人看過(guò)《硅谷》,知道劇里面 Richard 和一個(gè)妹子因?yàn)橛?Tab 還是用空格吵翻的故事。另外你可能也聽(tīng)說(shuō)過(guò)大括號(hào)放上行還是放下行之類的程序員宗教問(wèn)題。
我想說(shuō),多人合作最重要的就是入鄉(xiāng)隨俗。你用 Tab,但團(tuán)隊(duì)里的規(guī)范是用空格,那你就用空格,沒(méi)什么可說(shuō)的。當(dāng)然,你寫(xiě)自己的小項(xiàng)目還是可以用 Tab。這些程序員宗教現(xiàn)在都是程序員之間開(kāi)玩笑用的了,不要把電視劇里的情節(jié)當(dāng)真啊~
編輯器的重要性
這是一個(gè)程序部門(mén)和其他部門(mén)溝通的話題了。作為一個(gè)游戲程序員,你的代碼面向的客戶可不是只有游戲玩家。策劃、美術(shù)、測(cè)試、市場(chǎng)運(yùn)營(yíng)等等,都是你程序的用戶。把游戲的編輯器做好是你的義務(wù)。我在公司里要求程序員都去學(xué) UE/UX 的知識(shí),就是為了他們把編輯器做好,讓用戶用著舒心。我可是見(jiàn)過(guò) N 多個(gè)因?yàn)榫庉嬈骼x職的策劃或者美術(shù)。
結(jié)語(yǔ)
啰里啰唆寫(xiě)了這么多,不知道大家看著覺(jué)得如何?如果大家對(duì)編程的一些概念還有興趣的話,我可以再開(kāi)一篇文章,用比較白話的方式,結(jié)合主機(jī)游戲的內(nèi)容講講編程的基礎(chǔ)知識(shí),比如:
什么是數(shù)據(jù)抽象(結(jié)構(gòu)體)?
什么是過(guò)程抽象(函數(shù))?
什么是面向過(guò)程?
什么是面向?qū)ο??什么是?shí)例?什么是繼承?什么是多態(tài)?
來(lái)源:機(jī)核
新浪聲明:新浪網(wǎng)登載此文出于傳遞更多信息之目的,并不意味著贊同其觀點(diǎn)或證實(shí)其描述。
1、 網(wǎng)站注明“來(lái)源:中國(guó)通信工業(yè)協(xié)會(huì)電子競(jìng)技分會(huì)”的所有作品,其他媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)必須注明:“來(lái)源:中國(guó)通信工業(yè)協(xié)會(huì)電子競(jìng)技分會(huì)”。
2、凡本網(wǎng)站注明“來(lái)源:XXX”的作品,均轉(zhuǎn)載其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。本網(wǎng)站提供的資料如與相關(guān)紙質(zhì)文本不符,以紙質(zhì)文本為準(zhǔn)。