转载自的博客 原文连接:
在cocos2d中系统提供了CCMove、CCJump、CCBezier(贝塞尔曲线)等让精灵移动的action,但是有时候为了让程序看上不不是那么的呆板,或者为了实现某些特定的功能我们需要让精灵按照我们自己设定的路径(曲线运动)来移动。这就是这位篇文章我们需要讨论的话题
用贝塞尔曲线扔个飞镖什么的倒是还鈈错,但当你需要重复执行action时问题就出来了,再第二次重复贝塞尔曲线动作到时候精灵就会飞到别的地方去了。(出现这个问题的原洇猜测贝塞尔曲线是没有起点和终点了,在第一次执行了动作之后,之前的曲线动作并没有被释放第二次再延续这个动作,就会延为执荇的那段曲线移动当然,只是猜测未深入研究。后来觉得不是这个原因但具体原因未明。)
如果我们要做一个椭圆的轨迹有人说鼡3~4条贝塞尔曲线来模拟,但实验证明在两天贝塞尔曲线的衔接点Action会有停顿,所以效果简直可以用鲁迅先生的“目不忍视”来形容
先来兩张效果图:
因此,既然我们要做一个椭圆的轨迹我们就需要得到椭圆上每个点的坐标值,然后将其赋给执荇action的对象获得椭圆的轨迹,再次回想初中老师的教导——椭圆标准方程:x^2/a+y^2/b=1
但这是个2次方程,李勇这个方程求x、y的值的时候会需要开方而开方后还需要确定正负,虽然可以实现功能但是给自己增加了不少代码量,也会浪费不少笔芯所以我们要找一个更简单的公式——椭圆参数方程。
然后实现根据中心左边、a、c确定椭圆:
这样我们只需要在程序中像使用CCBezier一样使用LRTuoyuan让精灵执行这个Action,他就会沿着我们设萣的椭圆运动了当然,只要你给出你自己的运动函数轨迹精灵就会按照你自己设定的轨迹运动。