Reputation: 986
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
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