轉載自 https://learnopengl-cn.github.io/06%20In%20Practice/2D-Game/01%20Breakout/
看完前面的教程之後我們已經瞭解了非常多的OpenGL內部工作原理,並且我們已經能夠用這些知識繪製一些複雜的圖形。然而,除了之前的幾個技術演示之外,我們還沒有真正利用OpenGL開發一個實際應用。這篇教程爲OpenGL 2D遊戲製作系列教程的入門篇。這個系列教程將展示我們該如何將OpenGL應用到更大,更復雜的環境中。注意這個系列教程不一定會引入新的OpenGL概念,但會或多或少地向我們展示如何將所學的概念應用到更大的程序中去。
由於我們希望事情能夠簡單一點,我們會以別人開發過的一個2D街機遊戲爲基礎,開發我們自己的2D遊戲。這就是Breakout,一個於1976年發佈的運行在Atari 2600主機上的經典2D遊戲。遊戲要求玩家通過操控一個擋板反彈小球,以破壞所有的磚塊,而不能讓小球到達屏幕底端。當玩家破壞了所有磚塊的時候即爲完成了遊戲。
下面我們可以看到Breakout原本在Atari 2600上是什麼樣子的:
遊戲有以下幾個機制:
- 玩家能夠控制一個小擋板,它只能在屏幕範圍內左右移動。
- 球在屏幕上運動,每一次碰撞都會使球根據碰撞位置改變運動方向。對屏幕邊框,磚塊,擋板都需要有碰撞判定。
- 當球運動到屏幕底部邊界的時候,遊戲結束或者玩家喪失一點生命值。
- 球碰到磚塊的時候,磚塊會被破壞。
- 當所有磚塊都被破壞,玩家獲勝。
- 球的方向可以通過球碰撞在擋板上的位置(即到擋板中心的距離)來操控。
由於小球會不時通過縫隙到達磚牆的上方,它會在頂部邊緣與磚塊層的上邊緣之間不斷彈跳。小球會一直持續這種狀態直到最終再次進入縫隙掉下來。這也是這個遊戲名字的來源,小球必須要從縫隙中逃脫(Break out)出來。
OpenGL Breakout
我們將把這個經典的街機遊戲作爲我們之後要完全使用OpenGL實現的這個遊戲的基礎。這個版本的Breakout將會運行在顯卡上,所以我們能夠改進經典的Breakout遊戲,給它加一些很棒的特性。
除了以上這些經典的機制,我們的Breakout還將擁有:
- 你見過最棒的畫質
- 粒子系統
- 高級文字渲染
- 道具
- 後期處理特效
- 多個(可自定義的)關卡
爲了引起大家的興趣,你可以看看遊戲完成之後的樣子:
這些教程將會結合之前教程中的大量概念,並且會展示如何讓它們以一個整體工作。所以,在你開始這個系列教程的學習之前,請至少完成「入門」章節。
而且,有些教程會需求其它一些教程的概念(比如說在「高級OpenGL」章節中的幀緩衝),所以當必要的時候我會列出需求的教程。
如果你已準備好開發這個遊戲,可以開始下一節的學習了。