SpriteKit SKAction easing

Ну, заголовок дает вопрос, как я могу применить ослабление к действиям SKAction node в SpriteKit?

Я обнаружил, что это работает:

SKAction *moveAction = [SKAction moveByX:moveX y:moveY duration:0.5];
moveAction.timingMode = SKActionTimingEaseInEaseOut;
[node runAction:moveAction];

Однако есть только несколько доступных типов ослабления , а именно: Linear, EaseIn, EaseOut, EaseInOut.

И эти ослабляющие значения являются фиксированными и не могут быть изменены. Я ищу что-то вроде EleasticInOut. С предпочтительнее немного больше контроля. Как я могу создать это?

Ответы

Ответ 1

Я использую рамки SKEase: https://github.com/buddingmonkey/SpriteKit-Easing Он прост в использовании в качестве стандартных действий SpriteKit и добавляет все обычные более сложные решения: кубический, отскок, эластичный, задний и т.д. SpriteKitUtils также добавляет более сложные типы упрощения и некоторые полезные утилиты SpriteKit: https://github.com/raywenderlich/SKTUtils

Другой вариант состоит в том, чтобы свернуть свой собственный метод пользовательских действий и передать ему блок кода с помощью пользовательской функции облегчения/анимации:

-(SKAction *)customActionWithDuration:(NSTimeInterval)seconds actionBlock:(void (^)(SKNode *node, CGFloat elapsedTime))block

Ответ 2

Apple представила анимацию spring в UIKit пару лет назад, позволив вам установить затухание и начальную скорость spring при выполнении анимации UIView. К сожалению, они не реализовали это в SpriteKit, поэтому я создал свою собственную библиотеку, которая делает именно это.

Это набор расширений на SKAction, которые реплицируют большинство методов factory, добавляя параметры затухания и скорости.

Код находится на GitHub, не стесняйтесь использовать его: https://github.com/ataugeron/SpriteKit-Spring