[請益] 下落式節奏遊戲的變速效果
看板GameDesign (遊戲設計)作者joe820730 (Let it go)時間3年前 (2021/07/27 02:36)推噓1(1推 0噓 11→)留言12則, 2人參與討論串1/3 (看更多)
如標題
先上作品,其實就是仿製的唯舞獨尊
https://www.youtube.com/watch?v=nHJy2J6qlOg
沒有使用Unity之類的主流遊戲引擎,在畫面特效上花了不少心思
也因為完全不會PS,所有的圖片素材都是用PowerPoint畫的
因為工作的關係已經很久沒更新了,最近心血來潮想把這個小作品做到一個自己滿意的段落
程式碼雖然有上傳Gitlab,但那時候的coding style實在亂七八糟,遲遲沒有機會好好
整理,一些比較很久沒動的function甚至還有我自己現在看到會吐血的命名風格...
總之,當時留下的其中一個TODO,就是我這次想問的變速譜面問題
=============================
先說明一下,打擊點(下稱Note)的資料結構大概是這樣:
每個小節之間用Linked list串起來,小節裡面再用一個Linked list將Note串起來
| 小節 | -> | 小節 | -> | 小節 |
| O -> O -> O | | O -> O -> O | | O -> O -> O |
上面每個O代表一個Note,用 -> 來代表資料之間用Linked list串聯
每個Note都是一個Struct,主要內容是該Note應該出現的時間(下面用NT代稱),
以及該Note現在在螢幕上的位置(NPOS)
Note在螢幕的位置則是用音樂播放時間(下面用CT代稱)來計算
然後因為設計上會有Note流速的變化,因此還有一個速度參數(SPEED)
所以Note位置的計算公式會是NPOS = (NT-CT) * X * SPEED
其中X為一個常數,用來控制Note的基礎流速(或稱為1倍速)
========================
以上的方法很好處理,而且可以在一些趣味性質的譜面設計一些超高速的Note來搞初見殺
但是如果要做到整個譜面瞬間停止的效果我就沒想法了
所謂的瞬間停止可以參考:https://youtu.be/nNDqedR2qq4?t=73
有思考過把整條譜面當作一個傳送帶,經過特殊檢查點時改變傳送帶的移動方向或流速
但當時實作的時候遇到改變流速/方向之後位置跑掉的問題,後來就沒有繼續研究下去了
所以想來這邊問看看有沒有寫過節奏遊戲的前輩,可以在這部分提供一些經驗嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.248.95 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1627324601.A.BE7.html
→
07/27 04:09,
3年前
, 1F
07/27 04:09, 1F
→
07/27 04:09,
3年前
, 2F
07/27 04:09, 2F
感謝回覆,但我發現我一開始的敘述會讓焦點集中在譜面瞬間停止這件事
的確,如果只是要做到瞬間停止的話,可以用你的方法達成
但是要讓整體流速改變就會遇到問題了
https://www.youtube.com/watch?v=98Xljq8MxyU
比如上面這個譜面就做到了:
1. 不同流速的Note同時流動
-> 在我目前的架構上已經驗證過可行,Note的內容有標記該Note的流速
2. 單一Note逆流
-> 理論上我目前的架構應該做得到,但印象中直接把Note直接標記成負流速會有問題,
程式碼要改一下才能實現,不過這個問題不大
3. 改變整體流速、瞬間停止
-> 其實讓整體流速=0就是瞬間停止了,所以這兩個應該可以算同一件事?
主要的問題在改變整體流速,以我觀察到的主流節奏遊戲,大多是這樣做的:
| A小節 | -> | B小節 | -> ...
| O -> O -> O | | O -> O -> O |
| 1 倍速 | | 2 倍速 |
假設上圖這些Note的時間間隔一致
但是因為兩個小節設定的流速不同,所以在畫面上的間距不同
也因此當歌曲進入B小節的時候,整條譜面要用2倍流速移動
才能讓Note在正確的時間移動到在判定線上
問題就在於整體流速改變後,要如何確保Note出現在判定線的時間不會跑掉
※ 編輯: joe820730 (60.248.108.208 臺灣), 07/27/2021 12:10:23
推
07/27 16:56,
3年前
, 3F
07/27 16:56, 3F
→
07/27 16:57,
3年前
, 4F
07/27 16:57, 4F
→
07/27 16:57,
3年前
, 5F
07/27 16:57, 5F
→
07/27 16:58,
3年前
, 6F
07/27 16:58, 6F
其實現在的架構已經是改過的了,比較早期的版本確實是你說的各自獨立
雖然一樣是用linked list串起來,
但每個Note的位置是個別計算的,彼此之間完全沒有關聯
不過你這個說法倒是突破我一直以來的盲點了
其實在舊的架構下,既然已經是各自獨立計算路徑
那就不需要使用統一的公式來計算移動路徑
如果每個Note有各自獨立的移動路徑公式,確實就可以做到各種花式譜面
→
07/27 16:58,
3年前
, 7F
07/27 16:58, 7F
→
07/27 16:59,
3年前
, 8F
07/27 16:59, 8F
效能部分我倒是不太擔心,我有限制掃瞄範圍
我的做法是從最後一個離開判定區的Note開始,只掃描大約5秒範圍內的Note
這樣不會影響畫面,也可以減少不必要的計算(已經離開判定區就不用再掃描了)
→
07/27 16:59,
3年前
, 9F
07/27 16:59, 9F
→
07/27 17:00,
3年前
, 10F
07/27 17:00, 10F
→
07/27 17:01,
3年前
, 11F
07/27 17:01, 11F
→
07/27 17:02,
3年前
, 12F
07/27 17:02, 12F
這就是我當初沒有做得太複雜的原因,也是我在這個遊戲的另一個未完成的TODO...
當時沒有能力去做一個編輯器來讓譜面設計視覺化
折衷的辦法就是用普通的文字編輯器去設計譜面
但這樣理所當然地限制了可以設計的難度,也限制了譜面變化的彈性
最後也很感謝兩位的建議
目前已經有新的想法可以去實作
※ 編輯: joe820730 (125.227.248.95 臺灣), 07/27/2021 23:05:58
討論串 (同標題文章)
GameDesign 近期熱門文章
PTT遊戲區 即時熱門文章