在Udemy學遊戲開發,從基礎到完成Flappy bird和Runner遊戲,略過程式碼和大家分享背後細節。
關於課程
如果對於iOS App開發陌生,可以看到在編輯器內有許多模板,我目前學習、也是多數人起步的方向,都是在「Single View Application」模板進行開發、而旁邊的「Game」模板倒是完全沒用過。
如果用運動項目來想,大概就是「陸上運動」和「水上運動」的區別吧;就算很熟練跑馬拉松、換到水中的長泳還是需要重新適應環境、學習不同的基本技能。
本來只是想在原先規劃的空檔加減看看、轉換心情;結果因為太有趣了,過去四天除了吃飯外幾乎都在上這堂課!
學會了基本遊戲開發流程、並完成兩個專案:熱門遊戲Flappy bird、跑步障礙賽Cowboy Runner。至於剩下的專案Jack The Giant看起來實在不太吸引我,先無視它的存在。
略過程式碼,和大家分享過程中學到的遊戲邏輯、和我想的有趣範例 🙂
物件移動
遊戲畫面每秒會刷新(update) 很多次,我們可以在每次更新時設定條件,讓物體產生視覺上的移動效果。
比如我在畫面中放上謎樣生物,告訴程式每次刷新畫面時,讓他向左移動一個單位;如果一秒刷新60次,就會一秒向左移動60個單位。可以想像我們站在一個超長的跑步機上面,讓相機鏡頭對著自己,就算是在上面坐著,也會被輸送帶慢慢地送出鏡頭畫面外。
在專案練習的橫向2D遊戲,也只是讓背景和障礙物從右到左輸送過去,角色從頭到尾都在原地跳躍。
觸碰偵測
系統偵測觸碰的位置,執行對應動作。
例如上面的範例,我告訴程式要在我點擊的地方出現一個小偷的大頭貼;也可以依照需求分成點擊螢幕時(touchesBegan)出現、或是手指離開螢幕時(touchesEnded)出現等。
在遊戲裡,當滿足觸碰條件,便執行我們預設的動作。例如Flappy bird中點擊畫面讓小鳥往上飛一下、Cowboy Runner中當玩家點到暫停按鈕的位置,就讓遊戲暫停。
物理屬性
賦予物理屬性,像是受到重力影響的自由掉落(affectedByGravity)、以及碰撞的感應範圍(SKPhysicsBody)等。
感應範圍像是在特訓99操縱飛機閃躲子彈、或是在東方系列閃躲彈幕都是好例子,圖片尺寸不完全等於感知的範圍,所以會出現擦過機身但沒有判定失敗的情況。
有看過漫畫獵人,就想像成圓吧。
日常生活如果有覺得遠遠靠近一些人,周遭的空氣就變了,可能是結冰的感覺或是在心中開出粉紅色的花朵,大概類似那樣的感覺,雖然沒有實際碰觸到、但已經撞到氣場(?),就像圖中外圍的圈圈。
動態靜態物件
關於物件可不可以被其他物件影響(isDynamic)位置的設定。
像是玩倉庫番,工人可以推動地上的箱子就是動態;牆壁相對來說就是靜態。或是屁股離開椅子,找到附近的矮櫃,可以抬起來移動就是動態、如果是嵌在牆內的系統傢俱就是靜態,類似這樣的概念。
範例中我把超人設成靜態物件,就不會被從上面墜落的角色壓到畫面外,直挺挺地飄在原地。
Flappy bird
完成品。
不過比起成品,過程中的嘗試更加有趣,像是沒有把地板設成靜態、小鳥一降落地板就被擊沈了;沒有設定禁止旋轉,小鳥就會轉啊轉的好開心。
Cowboy Runner
完成品。
跑步牛仔是用11個圖案快速播放形成的,難以想像細膩動畫的背後有多驚人,這邊看到的第一個念頭是「請人幫忙設計看來資金要充足點呢」。
為何只能在地上奔跑?
作者任性的想讓你飛就飛吧,牛仔先生~人生不設限啊~~~(揮手)
小結
文章和錄影片加起來用了四個多小時整理,希望這些遊戲背後的設計概念,能對第一次接觸的你有所幫助。就算不是開發者,知道這些新東西也很有趣啊~是不是~