如何将不同的缓动效果应用于精灵动作?

我在这里描述的Cocos2D中使用了很多CCEase*function。 iOS 7 Sprite Kit也有SKActionTimingMode 。 但只有简单的模式。 我如何获得CCEaseElasticInCCEaseBounceIn使用Sprite Kit的效果?

Sprite Kit会让开发者控制精灵动作的细节,从而有意地限制缓冲(或补间)。 基本上,你需要做的是做一个自定义的动作,并在改变精灵的属性(旋转,位置,比例等)之前对参数应用一个缓动曲线。 这是一个例子。

 CGFloat initialScale = mySprite.xScale; SKAction *scaleAction = [SKAction customActionWithDuration:duration actionBlock:^(SKNode *node, CGFloat elapsedTime) { CGFloat t = elapsedTime/duration; CGFloat p = t*t; CGFloat s = initialScale*(1-p) + scale * p; [node setScale:s]; }]; [mySprite runAction:scaleAction]; 

决定宽松的部分是p = t*t 。 所以, pt的函数,所以:

  • t是0时, p是0
  • t是1时, p是1

这意味着你将在开始和结束时开始,但是之间的曲线形状将决定你如何到达那里。 放松的function可以很简单,就像这里所示的那样,它基本上是一种易于使用的function,或者是相当复杂的function,如弹性或反弹。 要生成自己的,请尝试: http : //www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm或者更详细地看一下Robert Penner的方程式: http : //www.robertpenner.com/easing/

对于任意宽松来说,Kardasis的答案都是这样说的。

如果您正在寻找一种简单的方法来为您的animation添加弹跳效果,这与在UIKit中完成的工作方式一致,我为您准备了一些东西。

几年前,Apple在UIKit中引入了弹簧animation,让您在执行UIViewanimation时设置弹簧阻尼和初始速度。 不幸的是,他们没有在SpriteKit中实现,所以我build立了自己的库来做到这一点。

这是SKAction的一套扩展,它复制了大多数工厂方法,增加了阻尼和速度参数。

代码在GitHub上,随意使用它: https : //github.com/ataugeron/SpriteKit-Spring