CCEase动作缓冲的解析

17 篇文章 0 订阅

在很多游戏引擎中,都有各种各样的动作,以及各色各样的动作缓冲,以便达到不同的效果。

在cocos2d中,同样也有这样一大批动作缓冲类。

先让我们分析下动作是如何运行的吧。

1、动作的要素

一般的动作至少有2个要素,一个是时间、一个是目的地,可能是位置(距离),也可能是其他属性。

2、如果只考虑线性,不考虑缓冲,那么基本的计算公式就是:

   当前属性 = 起始属性 + 逝去时间*(目标属性 - 起始属性)/总时间

这个公式变化一下就是:

   当前属性 = 起始属性 + 逝去时间/总时间 * (目标属性-起始属性)

3、比率

我们可以看出,以上的公式中,只有逝去时间是变化的,我们设

比率rate = 逝去时间/总时间 

在计算机中,这个逝去时间基本是线性累加的,我们如果想做各种缓冲,只需要改变rate即可。

下面我们来看下cocos2d中的动作类关于变化部分是如何设计的:

动作基类CCActionInterval中,动作会首先调用

-(void) step: (ccTime) dt

{

if( firstTick_ ) {

firstTick_ = NO;

elapsed_ = 0;

} else

elapsed_ += dt;


[self update: MIN(1, elapsed_/duration_)];

}

然后调用

-(void) update: (ccTime) t。

从上面我们可以看出,update的参数其实是一个比例,就是已经逝去时间/总时间,而不是所谓的ccTime。

这里之前我一直存在着误解,以为update中的t就像其他的update中的t一样是 逝去时间,其实大错特错,这个只是个比例


这个参数其实应该改下名字,叫做rate更好一点,只能在0到1之间变化。

现在我们来看下CCMoveTo的update函数吧

-(void) update: (ccTime) t

{

[target_ setPosition: ccp( (startPosition.x + delta.x * t ), (startPosition.y + delta.y * t ) )];

}

其中,delta是属性 位置之差,是不是和我们之前分析的一样呢。


缓冲函数:

他们的功能很简单,就是改变rate,让我们来看下CCEaseIn

-(void) update: (ccTime) t

{

[other update: powf(t,rate)];

}

这个函数很简单,就是将t替换成 t的rate次方,rate是可以设置的,其实就是一个幂函数,而起变化区间在0与1之间。

我们来复习下中学的知识,看下幂函数的图像吧:


在0到1区间,由于指数rate是大于1的,所以就是下面的那些曲线,变化先慢后快。

而CCEaseOut呢,

-(void) update: (ccTime) t

{

[other update: powf(t,1/rate)];

}

这个更简单了,直接求个rate的倒数。


至于其他的缓冲函数,我就不一一列举了,要写自己的缓冲函数,必须先了解数学曲线哦。^_^






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值