我在 Cocos2D 中使用了很多CCEase*
个功能here。 iOS 7 Sprite Kit 也有SKActionTimingMode
。但只有简单的模式。如何使用 Sprite Kit 获得CCEaseElasticIn
或CCEaseBounceIn
类似效果?
答案 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
。因此,p
是t
的函数,因此:
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