如果你之前已经手动创建过一个GameMaker菜单,你可能已经遇到了这个问题。玩家在之前动画还在播放的同时移动光标,缓动被破坏。一个新的缓动从旧的动画停止的地方开始。速度被丢弃,这导致动画明显卡顿。快速移动控制器,动画看起来就像被破坏了。
解决我们的问题的是放弃缓动,使用spring积分器。spring可以持久保存位置和速度。当选择改变时,不需要重启任何东西,不需要创建新的动画。你只需要移动目标。已经存在的速度会直接传递。动画在任何速度下都保持连续。
整个过程是三步骤:计算当前位置到目标的距离,乘以刚度常数和时间差,然后将速度乘以阻尼因子,最后将速度乘以时间差并添加到位置上。这样就是整个积分器。
我们通过经验学到两件事。阻尼需要以每秒的因子应用,而不是每步或每帧的因子,否则动画的感觉会随着帧率的变化而改变。每帧重目标的spring永远不需要完成回调。这样可以移除一个惊人的数量的状态,从我们的菜单代码中。
值得分享的是,每个面板、边框和条形都是在绘制时从基本形状和颜色数学中创建的。没有九宫格png和纹理页面条目。这样可以在480p到4K之间的所有分辨率下使用一个代码路径,而不需要额外的资源。
披露:这是我们的一项付费资产,代码是由AI协助编写的。上述spring数学是有用的部分。无论是否购买我们的资产,或者你自己编写代码,都可以使用它。欢迎深入探讨积分器或分辨率独立的绘制。
评论 (0)