「學」的部分
你可能會說,這是一個多餘的章節,是不是湊字數的?如果你真的這麼想,說明你的思維方式是比較淺顯的,看問題是不夠透徹的。
如果說,這是一套教你寫一個2D遊戲的教程,那麼這一章就是多餘的。可我們學的是3D遊戲編程,提前知道最終的遊戲會寫成什麼樣子,對你接下來的學習過程是有很大幫助的。
通過上一節的內容,我們已經知道,3D遊戲的編寫過程,就是模擬「拍電影」的過程,只不過,一切需要的「道具」都需要程式設計師自己去「虛擬化」。3D遊戲編寫是一個非常非常龐大的獨立學科,一頭扎進去,幾十年都很難學精通。一個程式設計師,能夠獨立寫出類似CS這樣能聯網的3D遊戲已經非常厲害了。所有的遊戲程式設計師,都是在一次次地摸索過程中成長起來的。
然而,這個教程的目的是讓一個沒有什麼基礎的人入門3D遊戲編程,這個人,很有可能還是個十幾歲的孩子。所以,我在考慮這個3D遊戲示例的時候,還是蠻糾結的:設置得太簡單,教不了太多的東西;設置得太難,就可能講不明白很多細節。
我編寫這個3D示例程序,大約花費了半個月的時間,有增加內容的時候,也有刪除內容的時候,最終,這個還算滿意的示例程序就寫出來了。
說起來,這個3D示例不是很複雜,大約是如下這個樣子:
1.建造一個封閉的立方體房間,沒有門,有地板和天花板;
2.房間中有正常的重力,牆壁、地板、天花板都是硬的,可以反彈任何有彈性的物體;
3.由於房間密閉,所以,我在房間內添加了燈光;
4.為了讓房間看起來像一個房間,牆壁、地板、天花板都用了不同的貼圖;
5.光看房間沒什麼意思,我在房間內添加了一個發射系統,發射器就位於攝像機的位置上,只要玩家操控,就能發射比較重的彈球;
6.既然是彈球就會有彈性,我們要模擬彈球的物體碰撞過程,並展現出來;
7.彈球不僅會和房間邊界發生碰撞,彈球與彈球之間也會發生碰撞,這是一個有點複雜的物理問題了;
8.攝像機不能固定,要能移動和旋轉,否則會看不到彈球的運動效果;
9.遊戲一般都有聲音,所以,我給這個3D示例添加了彈球碰撞的聲音。
我們可以把這個3D示例看成是「彈球模擬系統」,如果你有興趣,在學完整個課程之後,可以試著改造這個遊戲程序,比方說,玩家可以通過改變參數,用來模擬各種不同屬性的彈球。這些彈球可以是足球啊、桌球啊、鉛球啊等等,只不過參數的設定需要大量的時間來試驗。
「習」的部分
我的建議是,首先你要自己學會整個課程,然後才能和孩子一起學習。如果孩子年齡挺大了,而且悟性不錯,你才可以讓孩子自己學。當你學會了整個課程後,就可以把這個3D示例編譯出來,當著孩子的面演示一下最終效果,可以激發孩子的學習興趣。如果你不想編譯程序,可以回過頭去第一節課看看,第一節內容的末尾有介紹,如何獲得這個3D示例程序的運行版本。