我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

查志強發表於2014-07-10

【原文:http://www.open-open.com/news/view/371f56

英文原文:Day 23: Release!

        【Part 1 – 開篇與前 2 天】

        開篇

        我想開發一款 Android 遊戲有一段時間了,但從來沒有一個好的 idea。最近,我一直在玩地鐵跑酷,發現它實在太有意思了。通常來講,我不喜歡沒有終點的遊戲,因為你不可能通關,所以每次我玩這些遊戲的時候,我總會 隨意設定一些目標然後再去玩。這次我的目標是得到 30 倍分數復乘技能。當我實現這個目標的時候,我就獲得一些技能然後就會迷上這款遊戲。這款遊戲也讓我意識到,一款 Android 遊戲沒有必要非要有什麼大的來頭和複雜的遊戲設定,簡單隨意就好。

        不管怎樣,我覺得一個遊戲如果能做到僅需你將手指對準一個東西然後向它射擊就很好了。如果再能有一個系統性的任務,每天每週需完成的挑戰和一些 武器升級的話,那麼這個遊戲就會很有趣了。我的第一個想法是創立一款遊戲,讓一些可愛的小怪獸在一個美麗的場景中到處跑,可以藏在樹後面,或者躲在老房子 裡,甚至可以是在雲朵裡。你需要做的就是儘可能多地將它們打下。我說的可愛的小怪獸,指的是一些像 Gremlins(小精靈)之類的玩意。它們會搬一些體形巨大的機器,或者是做一些其他的愚蠢的事情來讓你哈哈大笑。當然,作為一個擁有零預算的獨立遊戲 開發者,就按我可以想象到的動畫複雜程度來看,我知道這些將需要投入大量的藝術設計和開發時間。所以我決定採用一種不同的設計,這樣我可以在合理的時間內 自己完成。

        我現在的目標是在一個月內開發一款有趣而可玩的 Android 遊戲。

        第 1 天:後院大恐慌

        在逛動畫素材網站的時候,我發現了一些給力又免費的殭屍動畫。有殭屍走動、殭屍被槍擊中之類的。所以,這可能是個類似於殭屍射手的遊戲。

        遊戲角色會在他的走廊上,射殺從外面的麥田湧來的殭屍。遊戲的名字就叫後院大恐慌。你可以轉換不同的遊戲角色,老奶奶、拿著獵槍的摳腳大漢或者是拿著遠射程來複槍的大兵。下圖是非常非常草的草圖。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        更新:我剛才玩了會殭屍在美國。遊戲倒是挺有意思,但是像瘋子一樣一直按射擊多少有點無聊。我打算把後院大恐慌設計成一碰就死的模式,至少殭屍 裡不要有 boss。我仔細的想了想,殭屍主題對我來說有點太陰鬱了,而且只要市面上有,這個型別就不稀罕了。所以,我不確定遊戲會不會做成這個型別。另外,這個遊 戲看起來會涉及到 3D 圖形,不過我會堅持 2D,至少我的第一個安卓遊戲會堅持。

        第 2 天:安裝 Eclipse,選擇遊戲庫

        我下載了安卓包,然後在 Linux 系統上安裝了 Eclipse。 能在 Galaxy S2 手機上執行“Hello World”。 你好 Java。我真的得記住所有這些 Java 指令,因為從 2002 起,我就沒用過這些玩意兒了。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        看著這些 2D/3D OpenGL 類的東西,似乎用工具包/庫來搭建遊戲會是一個好辦法。我從 NordicGame2013 上弄到一些免費的 Unity3D 序列號,但是還沒有在 Google Play 上發行的許可權。所以我想我得暫時跳過 Unity 了。現在我正著手於 CoronaSDK 和一些其他的庫。

        【Part 2 – 第 3 至第 5 天】

        第 3 天:一個新的遊戲點子

        在網上泡 Android 相關論壇,找點子的時候,我看到了《Revenge of the Titans》的一則廣告。有著復古影象和漂亮動畫的酷遊戲。我也能做復古影象。所以,外星人會從太空降落到後院……

        不對!後院貌似不是個好點子。我想我得給遊戲取個新名字了。

        外星人在邊界上攻擊了遠端防守站。他們摧毀了自動系統,所以你不得不手動操作並射擊。這個遊戲可以叫 MANUAL OVERRIDE 或 EMERGENCY OVERRIDE。我在網上和 Google Play 上查了一下,貌似這兩個名字,別人都還沒用的。

        外星人的大型飛船在一個停靠站著陸,你必須要把他們趕在。他們可能躲在油桶後面,或者是已著陸的飛船後面等等。我想在遊戲中加一些可摧毀的東西,放在敵人旁邊。遊戲可能叫 DOCKING BAY 或 DECK 42 之類的名字。

        名字聽起來不是那麼令人興奮?嗯,是的。

        第 4 天:一個轉變

        我一直在嘗試畫停靠站的圖形,但他們看起來很垃圾,所以我正放棄了這個點子。戰鬥肯定是在太空中進行,這點不用改變。外星人會從螢幕的一端出 來,你可以在他們到達螢幕另一端之前射擊他們。在底部有一些能被摧毀的東西。外星人可能躲在這些東西后面,你可以將這些東西打掉或者在上面射出幾個洞。下 圖是一個例子,裡面有塔,衛星接收器和其它一些東西。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        我的想法是讓玩家在有限的時間內(比如說一分鐘),儘可能擊斃更多的外星人。

        由於這個遊戲有一個太空主題,我瀏覽了自己的字型集,並且找出了一些很酷的銀河字型。目前,我將使用 AdourGM 字型,用於顯示遊戲中的文字,比如:points 和螢幕選項等。

        受到 Gimp 的星雲教程的啟發,我使用 Gimp 完成了上圖。讀了 Gimp 的星雲教程,自己做了一些調整,我在幾個小時內完成上述圖。我討厭在一件事情上花費太多時間,不過,還好這個背景在這個遊戲的大部分地方中都能用到。

        第 5 天: libGDX 和圖形的想法

        我選擇了將要使用的庫。它基於 java 語言,看似相當的完整。我嘗試搭建並除錯了一個測試程式,可以很快上手。但我仍然困惑是使用場景(Scene),角色(Actor)以及其它的特性,還是 像以往那樣自己搭建這些東西。這個庫的文件缺少示例,也沒介紹如何結合,這種情況下,我猜想自己將會不得不依賴於 Google。例如,沒有任何解釋,你應該如何連線角色(Actor)和怪物(Sprite)。如果你有近 20 個圖形(或者其他類似的東西)一樣的怪物(Sprite),應該如何處理。

        對於第一個專案,我想我剛學會如何使用怪物(Sprite),然後使用以前的經驗來構建餘下的。對於將來的一些專案,我可能會更聰明,會清楚哪 些我需要使用的東西已經有了。我只是討厭先學了很多了,然後發現框架或者庫不夠靈活多變,不足以滿足我將來可能遇到的一些非常規的想法。

        下面是我對復古圖形的外星人的一些想法。大部分的時間,我先畫在紙上。這也許只是一種習慣,但遠離鍵盤和顯示器會讓我集中精力。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        【Part3 – 第 6 至第 8 天】

        第 6 天:第一批外星人和螢幕方向

        好了,現在有了一些復古風格的外星人它們正在到處飛。抱歉,暫時還沒有 demo。這款 Andriod 遊戲目前只有 .apk 格式的安裝包。想必你不大可能安裝一個陌生人發給你的安裝包。總的來說,目前背景和星星已經可以載入而且還會慢慢移動。為了讓星星滾動我在星星圖案上呼叫 了 setV ()和 setV2()函式,並逐個增加計時器的值。像這樣:

scrollTimer -= delta*0.014;if (scrollTimer < 0.0f)
    scrollTimer = 1.0f;
sStars.setV (scrollTimer);
sStars.setV2(scrollTimer+1);

        然後出現了一些外星人,它們會向右移動。這就是這款遊戲目前所有的功能。我仍然在學 libGDX,因此會花大量時間 Google、閱讀手冊或是看視訊。

        小貼士:我注意到一些藉助 libGDX 開發的遊戲通常會固定螢幕方向。在翻轉裝置時遊戲介面不會轉動。我在 SO(StackOverflow)的一些缺頭少尾的跟帖和評論中找到了一個簡單的解決辦法:只要將 AndriodManifest.xml 檔案中的 landscape 用 sensorLandscape 替換就可以讓螢幕隨著裝置一起自動翻轉。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        第 7 天:改變佈局和螢幕方向

        現在可以射擊外星人了。由於是復古風格的圖形,我決定在外星人爆炸時採用大畫素(在 Gimp 裡使用無差方式將外星人圖片放大 5 倍)。然後寫了一點碎片管理程式碼,在 libGDX 從中央向其它方向隨機發射碎片時進行中間計算。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        也許你注意到螢幕上沒有圖形表示你自己。這是有意為之的。如果你沒有意識到這一點也沒關係,因為這是第一人稱射擊遊戲。搞笑吧!嘿嘿,至少從技 術上來說是這樣的。你不必知道你在哪兒,只要射擊敵人就好。在一些測試版本中,我也嘗試了對外星人做一些尺度上的變換以增加縱深感,讓你感覺它們從遠處過 來。但在安卓裝置上用手指是很難射擊那些很小的東西的,所以我放棄了這個想法。

        為了讓這個遊戲更加有趣,射擊外星人用的鐳射槍需要不斷補充能量。每把可以射擊 10 次,然後需要點選螢幕左下角的能量按鈕。我現在還不確定它的特性——因為還需要測試。

        當我在測試這個功能的時候有件事讓我很頭疼:當射擊外星人的時候我的食指會滿螢幕點,很難看清螢幕上發生了什麼。然後我看了一些自己手機上各種 安卓遊戲,意識到如果螢幕方向是縱向的效果會更好。在縱向模式下,食指不是從螢幕下方而是從右邊過來的(當然你需要習慣使用右手)。在這種模式下,螢幕的 大部分割槽域還是可見的。我還改變了外星人飛行的方向,外星人會從螢幕上方出現而不是之前的從左向右出現。

        同樣基於這個原因,我還改變了遊戲的主要設計。你可以一直玩到讓一個外星人越過你,而不是之前的只能在固定時間內玩。起初我的想法是你可以每次 玩一分鐘, 在這一分鐘內你要儘量多得分(類似於水果忍者的加分規則)。現在我的想法是,雖然你可以有 3 條命,然而一旦你讓外星人越過了你遊戲就到此結束。

        後來我還修改了背景星雲圖。之前我寫過怎麼用 Gimp 畫帶有星星的夜空和星雲圖,但是每次不得不為了滿意的效果而做很多實驗。可以通過對兩個圖層做減法並增加一些固有噪聲,然後鍍上一層漸變顏色以達到效果。 問題是當對兩個圖層做減法的時候總會產生一些“小”星雲圖,而我想要的是整個螢幕都充滿色彩。我用畫筆隨機地在畫紙上點一些點,然後著上不同顏色。我把星 星分成 3 個圖層:第一個圖層,給每個點加上一個兩畫素的陰影(沒有補償),第二個圖層進行模糊化,第三個圖層讓它保持原樣。這個技巧可以畫出很好的星星效果,奧祕 在於保證相近的點有不同顏色或不同的清晰度。而這也正是真正星空所具有的特點。看起來相近的星星其實相距N光年之遙,只是從地球上看起來他們比較接近而 已。

        第 8 天:星空之戰

        我在試著給這個遊戲起個新名字。雖然想了一個“星空之戰”,但是是否合適感覺仍然有待研究。我嘗試了一些字型,後來決定使用一種叫做 Ruslan Display 的字型。

我是如何從0開始,在23天裡完成一款Android遊戲開發的 – Part 1~3

        今天我改進了外星人爆炸效果的演算法。我一直在思考怎麼讓敵人看起來有一波一波的進攻。先有 10 波敵人,緊接著 boss 出場。通過一關以後遊戲會有些加速,還會加入一些新的敵人。在每 10 級裡(10,20,30…)都會有一個新的 boss。這個演算法會一直重複執行,直到遊戲者輸掉為止。如果發現你想消滅所有外星人,遊戲的速度會被設定為開始速度的兩倍這樣你需要付出很多的努力。

        下面是現在對能量提升的設想:

        有時限的能量提升,可以在遊戲過程中收集到:

  • 盾牌(在螢幕的底部,防止一個外星人通過)
  • 分數倍乘提升器
  • 快速火力(只需手指持續按下然後到處移動)
  • 大炸彈(毀滅掉所有螢幕上的外星人)
  • 超能力(跳過十波敵人,但是獲得所有分數)
  • 銀河忍者(用絕地武士之劍腰斬敵人——水果忍者的風格)
  • 自動補充能量(自動為鐳射槍補充能量)
  • 多火力(同時有 3 或 4 個鐳射槍開火)
  • 多生命(啟動遊戲時有 4 條命)

        永久性的能量提升,可以在每次玩的時候不斷升級:

  • 快速火力
  • 盾牌
  • 銀河忍者
  • 自動補充能量

        待續


相關文章