作者aegis123321 (PE)
看板GameDesign
标题Re: [请益] 下落式节奏游戏的变速效果
时间Tue Jul 27 22:55:59 2021
※ 引述《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://webptt.com/cn.aspx?n=bbs/GameDesign/M.1627397761.A.7C9.html
※ 编辑: aegis123321 (114.32.192.70 台湾), 07/27/2021 22:57:41
1F:推 tarrytu: 推这篇,原Po给的参考游戏就是用这个方法做的 07/28 20:38
2F:推 joe820730: 感谢,今天上班花了点时间想这个方法,结果才发现其实 07/29 01:02
3F:→ joe820730: 我的公式是写成NPOS=(NT-CT)*X*SPEED,其实就是简化了 07/29 01:03
4F:→ joe820730: 不过还是非常感谢你的建议 07/29 01:05
5F:推 joe820730: 再推一下,刚才我终於想通了,基於你所说的公式,如果 07/29 01:09
6F:→ joe820730: 反而不能把公式化简,否则变速效果就会各自独立了 07/29 01:11