高手教你如何從零開始學遊戲程式設計
開發遊戲可能是學習程式設計的理由中最吸引人的一條了。但如何從零開始入門,達到能夠開發遊戲的程式設計水平,是困擾無數勇敢少年們的傳統難題。作為一名遊戲設計師,我沒有系統地學習過程式設計。從5年前開始,我有了自己從頭完整開發遊戲的念頭,於是斷斷續續地看了很多書,試過了很多入門方法和開發環境,但直到近半年才找到正確的門路。現在我在Unity開發環境下獨立製作遊戲原型和利用成型的框架完善遊戲功能已不成問題。
本文會介紹如何從零開始學習遊戲開發程式設計的方法,希望能為和我一樣掙扎在程式設計大門之外的遊戲開發愛好者們提供幫助。不過事先要說明的是,這種學習思路是為了幫助你在做遊戲的過程中逐漸學習編寫程式,不適用於其他領域,但作為一種入門方法,它能讓你在半年到一年的學習之後,做到獨立製做小遊戲(或原型)。
門外漢學程式設計的難點
介紹學習方法之前,我們先看看門外漢學程式設計最常遇到的問題。
第一,程式設計師們經常說程式語言只是程式設計工具,但市面上常見的教程都喜歡從語法、演算法和程式語言的使用思想開始教學,而不是把程式語言當做解決實際問題的工具來入手。因此,初學者經常耗費很大精力才能理解書上寫的演算法和思想,卻完全不知道理解之後能用來做什麼。
第二,很多程式設計教程雖然配有例項,但一方面例子的學習難度曲線增加得很快,剛看完一個“Hello World”例項,下一個例子可能就變成教你如何分配記憶體(真實的故事,我的一本學習Objective-C的教程就是這樣的)。另一方面初學者在對開發流程不熟悉的情況下,很難做到舉一反三,從一個例項裡總結出做另外三個遊戲的方法,我經常遇見看了三個不同型別的遊戲例項,放下書後卻連一個遊戲都做不出來的情況。
第三,很多程式設計教程為了提高普適性,在使用現成架構方面都很保守,導致了很多重複造輪子的教程出現。例如在前幾年Cocos2D(一個用於iOS平臺遊戲開發的遊戲引擎)還沒有現在這麼火時,幾乎所有的iOS遊戲開發教程講的都是如何使用OpenGLES來製作遊戲影象,而這些底層架構的實現對初學者來說是根本不可能完成的任務。
因此,適合初學者的學習方針是:從實際需求出發;“怎麼做”優於“為什麼”(為什麼可以在入門之後再慢慢理解);使用允許你偷懶的工具或架構(需要做的越少越好)。這些要求其實很容易滿足,答案恰恰在看起來和程式設計關係不大的領域——視覺化程式設計工具裡(Visual Programming Tools)。
視覺化程式設計遊戲引擎讓你先做再想
視覺化程式設計泛指一切使用視覺化元素的操作代替文字輸入的程式設計方式,大體上就是像畫流程圖一樣通過連線若干“盒子”和“箭頭”來實現程式邏輯。這個概念在遊戲開發工具上的應用越來越流行,近年來還有井噴趨勢,從老牌的GameMaker、RPGMaker、TorqueGameBuilder、到新興的GameSalad、Construct 2和Unity都是其中的代表。儘管這些工具和引擎各有不同的開發方式,但它們都能讓初學者在完全不懂程式設計語法和複雜演算法的情況下快速實現自己的遊戲設計。
我之前的態度是寧可抱著“看也看不懂,看懂了也不會做”的書苦學XNA(一個微軟釋出的使用C#的遊戲開發架構)和Cocoa(蘋果釋出的使用Objective-C的應用開發架構),也不屑於使用GameMaker、GameSalad之類的圖形介面開發工具。認為這些工具屬於“業餘型”,就算能做出遊戲來也是旁門左道,不能修煉內功。
直到有一次參加了柏林獨立遊戲BIG Jam的活動,接觸了很多非常優秀的遊戲開發者。他們大部分人都把GameMaker和Flash這些簡單的工具當做製作獨立遊戲的最佳選擇。原因是他們多年以前開始學習遊戲開發時使用的就是這些工具,常年的使用經驗讓他們能在最短的時間裡用這些工具實現想法。而使用這些工具從頭到尾製作了大量遊戲的經歷,也在他們以後學習用程式語言開發遊戲時打下了很好的基礎。
從那之後,為了快速開發原型,我開始物色入門級的視覺化程式設計遊戲引擎。HTML5遊戲引擎Construct 2偶然進入了我的視線。花十幾分鍾學習教程例項之後,我很快用幾個小時做出了一個一直在構思的遊戲想法(當然想法本身就很簡單,而且製作過程中碰到實現困難的設計都進行了進一步簡化)。說來慚愧,儘管在主機遊戲業從業多年,這次使用Construct 2的開發過程中我第一次感覺到對遊戲開發的整個過程和架構有了初步認識林琪琦http://blog.sina.com.cn/s/blog_ba4297540101g354.html
首先,視覺化程式設計工具裡一般都有一個現成的遊戲場景(任何遊戲開發過程中都需要一個畫布或一個攝像機來描述玩家可以看到的影象範圍),然後你需要把遊戲中需要的各個元素(一般稱為Actor,例如主角、敵人、子彈等,這就是程式語言裡物件的概念)放進場景裡,然後通過關聯邏輯模組來讓它們快速互動起來。Construct 2的邏輯模組使用了非常貼近程式語言的按行號從上到下的執行順序。而且你將從教程中學習到,原來遊戲開始執行後每一幀都會按順序執行一遍所有的邏輯,這就是遊戲開發的基本框架中最常說的主遊戲迴圈(Main Game Loop)。
除此之外,使用者使用邏輯模組時不用擔心語法錯誤和演算法的設計,一般這類引擎裡都會提供大量現成的演算法模組可供挑選。只要專注於設計遊戲邏輯,其他事情可以說都是軟體自動幫你完成。在觀看教程和其他範例專案時也一目瞭然,學習別人的設計思想更加容易。
通過使用Construct 2獨立完成了第一個遊戲原型後,我學到了相似的遊戲元素可以共享一部分屬性(程式語言裡使用類和繼承的概念);學到了所有活動的遊戲元素都需要在每一幀的迴圈裡進行驅動,每幀只運動一小段距離;還學到了應該在主遊戲迴圈的什麼位置判斷是否Game Over,以及Game Over時進入另一個迴圈來等待玩家重新開始遊戲等內容。