写得不错,支持一下
mark一下
mark~
看视频不是匀速的,但是又支持 FixSpeed?
支持40多种缓动函数,如果想要匀速,可以选择linear,就可以完全匀速了,demo里只展示了其中4种
直接tween+贝塞尔公式 就行了,没有那么多绕绕
原理确实不难,实际实现的时候一些细节处理比较耗时,尤其是角度控制以及贝塞尔曲线的一些重要参数参数处理。这个控件只是将其封装了下,解决一些实现时的坑,并做成组件可复用,帮助那些开发者快速做出想要的效果。
贝塞尔要匀速的话计算还挺复杂的
应该是点到点匀速,实际曲线没有匀速吧
最近在做一个塔防游戏,刚想用贝塞尔曲线做一个怪物出生动画。碰巧看到,就买来参考下。
说下几个可以改进的点:
1、组件中所有逻辑耦合在一起不方便其它情况使用,应该有更底层的计算逻辑封装;
比如
1)bezier2 函数是二阶步进
2)bezier3 函数是三阶步进
3)BezierMoveAPI,封装曲线运动的接口 API,方便其它控制逻辑调用
4) BezierMoveComp 将 BezierMoveAPI 封装成组件来使用
5) BezierTween 将 BezierMoveAPI 封装成 Tween 动画来使用
6)BezierAct 将 BezierMoveAPI 封装成动作对象,方便驱动模块进行步进的方式调用
这样覆盖面就相对比较全了。
2、Easy 函数比较全,但应该剥离出去给其它模块使用。我是直接把 LayaAir3.2 源码中的 Ease.ts 文件拿来用了,感觉Laya 的一些 API 设计也还是可以的。
好建议,后续会考虑做进一步封装。这个控件一开始初衷是让使用者能快速让node按Bezier曲线动起来,没想弄太复杂,不过既然有需求,那就安排起来。
很多好的工具和软件一开始都只是从一个看起来简单的小功能开始的,希望这个工具也能慢慢丰富完善,最后如果成为一个好用的曲线动画工具就太棒了.
搞笑的是,我还没买… 这就去买个.
拿到曲线上的n个点然后,每一段按照固定速度单独计算时间不就可以实现近似匀速了吗
你这n个点两点之间的链接曲线怎么保证是相等的, 曲线的长度是要求积分的。。。
简单取的话那只是近似, 而且误差很大,
可以这样
- 提前采样,假如提前采样步数是100,就建立了一个当前每一步的t和总距离的一个表.
- 开始update,根据走过的距离查这个表,得到在t1和t2之间,然后根据距离对t1和t2插值,得到近似的t
- 根据t得到具体位置.
提前采样的步数越多,越接近匀速. 不过大多数情况下,一定步数下观感和匀速就一致了.
是的 所以我说是近似的,不能严格匀速,及时积分长度无穷小都不能保证长度相等。但是分的段数足够多,也能满足开发需求了
这方面要用到数值积分,可以参考这篇csdn文章里面的辛普森积分法。
里面都有现成的写好的函数自己改改就能用。
贝塞尔曲线运动n阶追踪方程的数学原理及其匀速化方法和应用-CSDN博客
我自己测试的,迭代400次左右已经非常准确了
nice!支持!!!
你这个支持时间和位置对应起来吗?bro