Re: [請益] 下落式節奏遊戲的變速效果

看板GameDesign作者 (PE)時間2年前 (2021/07/27 22:56), 2年前編輯推噓3(303)
留言6則, 2人參與, 2年前最新討論串2/3 (看更多)
※ 引述《joe820730 (Let it go)》之銘言: : ============================= : 先說明一下,打擊點(下稱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的位置函數,所以不用想怎麼"突然改變note的速度" 任何改變都會直接讓note飄移,視覺上不可行的 用函數角度來想的話,這個就只是個斜率為X*Speed的直線 所以也不可能讓你的Speed=0,那只會直接讓note停在你的判定點上不動 那變速這件事情就只能建立在這個函數本身才行 因為NPOS就是NT與CT的位置差,我們可以把原式換成這樣: Pos(t) = t * X * SPEED NPOS = Pos(NT) - Pos(CT) 接著來做整體流速改變: 舉例來說在t=0.5前速度為1,之後速度為2 那就把Pos函數改成 Pos(t) = min(0.5, t) * X * 1 + max(0, t - 0.5) * X * 2 也就是t小於0.5以前的斜率為X*1,之後的斜率為X*2 NPOS算法一樣,就能得到變速效果,停止、倒退效果也同理 Pos(t)的函數用程式寫起來更容易,要處理N個變速點也應該不難 不過還沒驗證過 單純討論想法看看 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.192.70 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1627397761.A.7C9.html ※ 編輯: aegis123321 (114.32.192.70 臺灣), 07/27/2021 22:57:41

07/28 20:38, 2年前 , 1F
推這篇,原Po給的參考遊戲就是用這個方法做的
07/28 20:38, 1F

07/29 01:02, 2年前 , 2F
感謝,今天上班花了點時間想這個方法,結果才發現其實
07/29 01:02, 2F

07/29 01:03, 2年前 , 3F
我的公式是寫成NPOS=(NT-CT)*X*SPEED,其實就是簡化了
07/29 01:03, 3F

07/29 01:05, 2年前 , 4F
不過還是非常感謝你的建議
07/29 01:05, 4F

07/29 01:09, 2年前 , 5F
再推一下,剛才我終於想通了,基於你所說的公式,如果
07/29 01:09, 5F

07/29 01:11, 2年前 , 6F
反而不能把公式化簡,否則變速效果就會各自獨立了
07/29 01:11, 6F
文章代碼(AID): #1X01w1V9 (GameDesign)
文章代碼(AID): #1X01w1V9 (GameDesign)