cocos2d-x 能自定义缓动函数吗?

你怎么用的?

我网上查了一下,确认这个函数的参数不是两个控制点(x1, y1, x2, y2) 这种形式,而是类似于 (y0, y1, y2, y3) 这种形式,y0 和 y3 一般分别填 0 和 1,表示从开始到结束,并且最后一帧动画会在预设的结束位置,换言之,如果 y3 设置的不是 1 则不会在预设的结束位置结束。中间的 y1 和 y2 我猜测可能是两个控制点的 Y 坐标。我不知道这是这个函数的 BUG,还是官方有深意地设定。

auto m_paraNode0 = ParallaxNode::create(); 这个方法不可以么?

不行的

是贝塞尔曲线吧

感觉也不是,那中间那两个参数代表什么含义呢

有起点,控制点1,控制点2,终点,起点就是node的坐标

你看下贝塞尔的方法

第一个参数是时间,第二个参数是贝塞尔的其它点

你这个软件就是贝塞尔曲线的

左下角的点就是起点,被固定了,红色点是第一个控制点,蓝色点是第二个控制点,右上角的白色点是终点,也被固定了

还是三次贝塞尔曲线,只不过起点是(0,0),终点是(1,1)

action.easing(cc.easeBezierAction(0.5, 0.5, 1.0, 1.0)) 像 @az1234liu 提到的这句代码的中间两个参数怎么理解呢?我跑这句代码得到的结果很奇怪,比如:
我设置了一个顺时针旋转 360 度的动作,设置了上面这个缓动函数后,首先就跳到 180 度,然后才旋转到 360 度。这是因为第一个参数是 0.5,第四个参数是 1.0 的缘故。但是现在我不是很理解中间两个参数的含义。

第一个参数是控制点1的x,第二个参数是控制点1的y,第三个参数是控制点2的x,第四个是控制点2的y,
因为你是要做缓动函数,它是依靠三次贝塞尔曲线实现的,起点和终点是固定的,起点是(0,0),终点是(1,1),只剩下2个点没确定,就是控制点1和控制点2,你可以搜CSS3动画工具你可以看下这里的

action.easing(cc.easeBezierAction(a, b, c, d)); 按照你的想法是要从开始到结束的话,你需要的是,action.easing(cc.easeBezierAction(0, b, c, 1)); 其中b和 c可以用在线工具色设置b c分别代表两个控制点的y值也就是这个

d多看源码

c是x值

其实它的x轴是不需要管的,用来缓动的话,因为它就是时间[0,1]之间

你确定不用管x轴?你没x轴你怎么确定一个点

:joy:你自己去试试就知道了,这个是缓动,不是确定点~~~如果你把这个贝塞尔曲线只当成点的话,这个就很难理解了

嗯,我也认同你的说法,但是这样的话是不是意味着 cocos2d-x 所能做的缓动特效很有限呢?

不知道是不是故意这样设置的,我在测试中也发现确实和 X 轴是无关的。

怎么难理解,起始点是(0,0),终点是(1,1)你的cc.easeBezierAction传的4个值就是(x1, y1, x2, y2),这本来就是通过三级贝塞尔曲线做线性运动的,这不能理解?

正常来说是这样的,只是这个 API 的行为确实不是这样,你可以看一下上面的讨论或者去阅读一下源代码。:grin:

应该还好,很不错了