ActionEase是ActionInterval的子类,能够变速执行动作。把内部动作进行了包装,通过传进update的time,加上不同的计算公式,算出新的time,作为内部动作的time,实现了内部动作变速。
用3种宏定义的方式对每个缓冲动作类进行定义:
EASE_TEMPLATE_IMPL(CLASSNAME, TWEEN_FUNC, REVERSE_CLASSNAME)
3个参数:类名,update调用的函数,反向执行的类名。
定义的方法:create、update、clone、reserve(执行参数中反向类的create方法)。
定义了:指数缓冲、Sine缓冲、跳跃缓冲、回震缓冲……
EASERATE_TEMPLATE_IMPL(CLASSNAME, TWEEN_FUNC)
2个参数:类名,update调用的函数
定义了:EaseIn/Out/InOut。create方法包括参数float rate,赋值给_rate。
EASEELASTIC_TEMPLATE_IMPL(CLASSNAME, TWEEN_FUNC, REVERSE_CLASSNAME)
定义了:EaseElasticIn/Out/InOut。create方法包括参数float period,赋值给_period。
函数TWEEN_FUNC通过缓冲的time计算出新time,作为内部action的update的参数time。
函数图像的横轴是包装类的time,随时间均匀增加,竖轴是传给内部动作update的time。斜率可以看做是内部动作运行的速率,斜率小于1,比正常速度慢,大于1,比正常速度快。
1. 指数缓冲 EaseExponential
EaseExponentialIn先慢后快,对应的tweenfunc方法:
EaseExponentialOut先快后慢,tweenfunc:
EaseExponentialInOut缓冲进度以0.5为界,分两种情况,呈现的效果是先慢后快再慢。
if(time == 0 || time == 1) return time; if (time < 0.5f) return 0.5f * powf(2, 10 * (time * 2 - 1)); return 0.5f * (-powf(2, -10 * (time * 2 - 1)) + 2);
2. EaseSine
Out:
In:
InOut:
3. EaseBounce
4. EaseBack
5. EaseQuadraticAction 2次函数
Out:
In:
InOut
6. EaseQuarticAction 4次函数
In/Out:
InOut:
7. EaseQuinticActionIn 5次函数
In/Out:
InOut:
8. EaseCircleAction 圆函数
In/Out:
InOut:
9. EaseCubicAction 3次函数
In/Out:
InOut:
10. Ease
create需要传入参数rate,作为tweenfunc计算时的次方数。
对于In:rate>1时,rate越大, 慢速时间越长越慢,加速越晚越快。0<rate<1时,rate越小,加速越早越快,慢速时间越长越慢。
对于Out:rate>1时,rate越大,加速越早越快,慢速时间越长越慢。0<rate<1时,rate越小,慢速时间越长越慢,加速越晚越快。0
对于InOut:rate>1时越大,越靠近0.5时间进度时加速,加速越快时间越短。1/2
11. EaseElastic
create参数period越接近0,弹性效果越明显。为0消失。