作者:
joe820730 (Let it go)
2021-07-27 02:36:39如標題
先上作品,其實就是仿製的唯舞獨尊
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
有思考過把整條譜面當作一個傳送帶,經過特殊檢查點時改變傳送帶的移動方向或流速
但當時實作的時候遇到改變流速/方向之後位置跑掉的問題,後來就沒有繼續研究下去了
所以想來這邊問看看有沒有寫過節奏遊戲的前輩,可以在這部分提供一些經驗嗎?
謝謝