8

我在此处描述的Cocos2D中使用了很多CCEase*功能。iOS 7 Sprite Kit也有. 但是只有简单的模式。如何使用Sprite Kit获得或喜欢效果?SKActionTimingModeCCEaseElasticInCCEaseBounceIn

4

2 回答 2

34

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/

于 2013-10-01T15:38:59.557 回答
2

对于任意宽松,卡达西斯的回答说明了一切。

如果您正在寻找一种简单的方法来为您的动画添加弹跳效果,这与 UIKit 中的操作方式是一致的,我有一些东西要给您。

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

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

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

于 2014-10-18T23:33:13.973 回答