如何从SKAction中的当前动画帧获取当前纹理?

时间:2017-06-28 03:46:06

标签: swift animation sprite-kit

我试图动画一些旋转/从左到右的动画,但每当我打电话时  spinLeft()或spinRight()然后动画总是从第0帧开始。

换句话说,我希望能够说10个帧中的4个旋转,然后停止  从相反方向旋转,从第4帧开始。现在,它重置为第0帧。

var textures = [SKTexture]() // Loaded with 10 images later on.
var sprite = SKSpriteNode()

func spinLeft() {
  let action = SKAction.repeatForever(.animate(with: textures, timePerFrame: 0.1))
  sprite.run(action)
}

func spinRight() {
  let action = SKAction.repeatForever(.animate(with: textures, timePerFrame: 0.1)).reversed()
  sprite.run(action)
}

1 个答案:

答案 0 :(得分:0)

你可以这样做(语法可能有点偏,但你明白了):

这里的关键是.index(of:...),它将为你提供索引。

func spinUp() {
    let index = textures.index(of: sprite.texture)
    if index == textures.count - 1 {
        sprite.texture = textures[0]
    }
    else {
        sprite.texture =  textures[index + 1]   
    }
}

func spinDown() {
    let index = textures.index(of: sprite.texture)
    if index == 0 {
        sprite.texture = textures[textures.count - 1]
    }
    else {
        sprite.texture =  textures[index - 1]   
    }
}

func changeImage(_ isUp: Bool, _ amountOfTime: CGFloat) {
    let wait = SKAction.wait(duration: amountOfTime)
    if isUp {
        run(wait) {
            self.imageUp()
        }
    }
    else {
        run(wait) {
            self.imageDown()
        }
    }
}

如果您使用滑动手势识别器之类的东西,您可以使用它的方向来设置isUp Bool值以及用于changeImage函数的amountOfTime的滑动速度。

changeImage只会更改一次图像,因此您需要在其他地方处理此图像,或者如果您希望它最终连续旋转或消失,则创建另一个函数。

希望这有帮助!