如何对sprite动作应用不同的缓动效果?

时间:2013-09-26 11:23:03

标签: ios ios7 sprite-kit

我在 Cocos2D 中使用了很多CCEase*个功能here。 iOS 7 Sprite Kit 也有SKActionTimingMode。但只有简单的模式。如何使用 Sprite Kit 获得CCEaseElasticInCCEaseBounceIn类似效果?

2 个答案:

答案 0 :(得分:33)

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

这意味着您将从头开始并在结束时结束,但两者之间的曲线形状将决定您如何到达那里。缓和功能可以很简单,就像这里所示的那样,它基本上是一种易于使用的,或者是非常复杂的,例如弹性或弹跳。要生成自己的,请尝试以下操作:http://www.timotheegroleau.com/Flash/experiments/easing_function_generator.htm 或者更详细地看看罗伯特·彭纳的方程:http://www.robertpenner.com/easing/

答案 1 :(得分:2)

对于任意宽松,Kardasis的回答都说明了这一点。

如果您正在寻找一种简单的方法来为您的动画添加弹跳效果,这与UIKit中的操作方式一致,我会为您提供一些帮助。

几年前,Apple通过让你在执行UIView动画时设置弹簧阻尼和初始速度,在UIKit中引入了弹簧动画。不幸的是他们没有在SpriteKit中实现它,所以我创建了自己的库来实现这一点。

SKAction上的一组扩展复制了大多数工厂方法,添加了阻尼和速度参数。

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