2023/8/7
关于delta time和高攻速平a
战斗系统中的dt会随着帧数,战斗速度而变化,而平a的攻速如果过快则会出现平a的cd比dt还小的情况。而之前的战斗系统的技能状态机的设计会让整个流程至少执行3帧 =>
准备阶段enter -> (准备阶段tick -> 攻击阶段enter) -> (攻击阶段tick -> 冷却阶段enter) -> (冷却阶段tick -> 准备阶段enter)
这会使得60帧的游戏每秒最多只能执行30次平a,多出来的攻速会被吞掉。所以对技能状态机进行改进,让所有状态的enter阶段进入后可以立即进行一次tick。这样便使得状态机可以在一帧内进行多次tick
又因为技能cd可能会少于dt,而状态机在tick时只是粗暴的将技能cd减去dt来计算剩余冷却时间,这使得当技能cd小于dt时有很大一部分的dt被浪费了 => 导致的效果就是一帧最多只能进行一次普工,30帧的游戏相对于60帧少了一半的伤害。
解决方案是在状态机中储存一个临时变量,在每次对状态机进行tick的时候将dt的值加上。在cd计算的时候选择cd和剩余dt之间最小的值。这样即可保证每次cd减少的值不会有多余的时间被浪费,通过状态机的循环,即可完成在一帧内进行多次普工的效果。
本文讨论了战斗系统中deltatime与攻速匹配的问题,原有的设计限制了高攻速下的普攻频率。通过改进技能状态机,存储临时变量并优化cd计算,解决了dt浪费问题,实现了一帧内多次普攻,显著提升了游戏性能。

被折叠的 条评论
为什么被折叠?



