Rachel Dockter
Rachel Dockter

Reputation: 986

Making a node's sprite change as an animation (spriteKit)

im very new to swift, i have made a sprite kit game with a coin sprite. I want to make it spin so ive made 6 sprites in total. Im trying to get a continuous loop of spinning by quickly changing the sprites. I have tried to do this with the code below.

    //This will hold all of the coin spinning sprites
    let coinTextures : NSMutableArray = []

    //There are 6 in total, so loop through and add them
    for i in 0..<6 {
        let texture : SKTexture = SKTexture(imageNamed: "Coin\(i + 1)")
        coinTextures.insert(texture, at: i)
    }

    //When printing coinTextures, they have all been added
    //Define the animation with a wait time of 0.1 seconds, also repeat forever
    let coinAnimation = SKAction.repeatForever(SKAction.animate(with: coinTextures as! [SKTexture], timePerFrame: 0.1))

    //Get the coin i want to spin and run the action!
    SKAction.run(coinAnimation, onChildWithName: "coin1")

As i said im very new so im not sure what ive done wrong here.

Also the name of the coin i want to spin is "coin1" and the sprites so from coin1 to coin 6

Upvotes: 1

Views: 288

Answers (1)

Alladinian
Alladinian

Reputation: 35706

You are almost there.

The problem is that your final line creates an action, but not running it on anything...

You got two alternatives:

1) Run your action on your scene

// Create an action that will run on a child
let action = SKAction.run(coinAnimation, onChildWithName: "coin1")
scene?.run(action)

or

2) Run the action directly on the child

// Assuming that you have a reference to coin1
coin1.run(coinAnimation)

As a sidenote, your array could be declared as var coinTextures: [SKTexture] = [], you can use append to add items to it and avoid the casting when you pass the textures to the action.

Or you can use a more compact form to construct your textures array:

let coinTextures = (1...6).map { SKTexture(imageNamed: "Coin\($0)") }

I hope that this makes sense

Upvotes: 3

Related Questions