我是韓石濼廷,最近在製作一款名為《詩》的遊戲,遊戲中的元素主要是詩歌和音樂(詳見視頻開發日誌https://www.bilibili.com/video/BV1Ek4y1C7ps/)。作為一名 indienova 的老粉,我經常閲讀 indienova 的公眾號文章,也從中學到了很多設計和開發遊戲的技巧。由於我自己也在做獨立遊戲,所以便想到了把開發日誌發表到這個平台上,也算給自己一種繼續做下去的動力吧。
目前的開發進度
首先,目前的開發進度為:
完成了標題界面的製作;
標題界面
實現了詩句以單句出現,玩家通過點擊詩句使其顯示下一句;
詩句點擊交互
實現了詩句單句點擊環節結束後,整首詩滾動出現並配合音樂;
整首詩滾動出現
《我看》和《面朝大海,春暖花開》兩首詩的製作已經基本完成。
感覺説得不太清楚,我還是建議大家去看看視頻,更直觀。
然後是本次日誌的內容。
本次日誌
《詩》中每首詩結束後,整首詩會在屏幕上滾動出現,同時玩家可以通過按一些按鍵控制鼓聲來配合背景音樂。但是,在目前的進度下,玩家只是主動按按鍵,這樣一些比較懶的玩家可能就不會去按了;並且不強制玩家在特定時刻按按鍵顯得本遊戲很佛系,沒有挑戰性。
於是,我打算將每首詩滾動出現時的交互設計成類似音遊的形式——玩家根據提示有節奏地按按鍵。
眾所周知,音遊主要由“音符”和“判定線”組成,當音符靠近判定線時,玩家需觸摸屏幕或點擊特定按鍵,此時程序根據音符和判定線的接近程度對玩家的操作進行評級(一般分為“Perfect”(音符和判定線幾乎重合)“Good”(音符和判定線較接近)“Bad”(音符離判定線過遠)“Miss”(沒有進行操作)四個等級)。根據這種基本規則,我設計了以下的互動方式:
音符、判定線
中間的圓相當於判定線,外面的圓圈相當於音符。音符的圓圈不斷縮小接近判定線,當音符與判定線(即中間圓的邊)重合時,玩家按下空格鍵。此時根據兩個圓半徑的差來對玩家進行評級。
判定評級
評級表現為音符的顏色變化並向外擴散消失。
現在,音符和判定線的交互設計和製作完成了。那麼如何將它們套用到曲子中呢?
我的思路是輸入每首曲子中創建每個音符的間隔,來實現音符與音樂對應。為了方便編輯,我決定輸入每個音符間隔的拍數。但是 Gamemaker Studio 2(我製作遊戲的引擎)中計算時間的單位是幀,那麼怎麼將拍數轉化成幀數呢?
我想到了以下方法:首先,我的遊戲中設定每秒為 60 幀。我們又知道每首曲子的節奏(即速度)的單位是 BPM(Beats Per Second),即拍每分鐘。以《我看》的同名配樂為例,它的節奏為 110 BPM,則每分鐘有 110 個 4 分音符,即 4 拍。所以,我們可以讓每個拍數乘以一個數轉化為幀數,而這個數就是?(每分鐘秒數*每秒鐘幀數) / 歌曲 BPM,即?3600/BPM。假設我想表示《我看》中一拍的長度,則表示為 1 * (3600/110) = 32.727272……
想到這個方法,我覺得我真是把自己給聰明壞了,趕緊去實踐下試試。然而,沒想到的是,開始音符和節奏還能合上,可到後面卻越來越搶拍......我仔細檢查了多遍我的代碼,沒發現任何錯誤。到底錯誤出在哪裏了呢?
想了半天左右,我終於意識到一個原則性問題——遊戲中時間的最小單位是 1 幀,那麼如果幀算出來是小數當然就自動取整了!!我被自己蠢到了......
總之,關於這個問題,目前還沒有什麼解決方法,現在已經很晚了,之後有時間再説吧。
【注:由於本次開發日誌的內容大多數是在 11 月 1 日完成的,故標題為 2020/11/1】