Reputation: 39
func addRocket(rocketNode: SKSpriteNode, atPosition position: CGPoint){
rocket = SKSpriteNode(texture: rocketTex)
rocketAnimArray = [SKTexture(imageNamed: "rocket1.png"), SKTexture(imageNamed: "rocket2.png"), SKTexture(imageNamed: "rocket3.png"), SKTexture(imageNamed: "rocket4.png"), SKTexture(imageNamed: "rocket5.png"), SKTexture(imageNamed: "rocket6.png"), SKTexture(imageNamed: "rocket7.png"), SKTexture(imageNamed: "rocket8.png"), SKTexture(imageNamed: "rocket9.png"), SKTexture(imageNamed: "rocket10.png"), SKTexture(imageNamed: "rocket11.png"), SKTexture(imageNamed: "rocket12.png"), SKTexture(imageNamed: "rocket13.png"), SKTexture(imageNamed: "rocket14.png"), SKTexture(imageNamed: "rocket15.png"), SKTexture(imageNamed: "rocket16.png"), SKTexture(imageNamed: "rocket17.png"), SKTexture(imageNamed: "rocket18.png"), SKTexture(imageNamed: "rocket19.png"), SKTexture(imageNamed: "rocket20.png"), SKTexture(imageNamed: "rocket21.png"), SKTexture(imageNamed: "rocket22.png"), SKTexture(imageNamed: "rocket23.png"), SKTexture(imageNamed: "rocket24.png"), SKTexture(imageNamed: "rocket25.png"), SKTexture(imageNamed: "rocket26.png"), SKTexture(imageNamed: "rocket27.png"), SKTexture(imageNamed: "rocket28.png"), SKTexture(imageNamed: "rocket29.png"), SKTexture(imageNamed: "rocket30.png"), SKTexture(imageNamed: "rocket31.png"), SKTexture(imageNamed: "rocket32.png"), SKTexture(imageNamed: "rocket33.png"), SKTexture(imageNamed: "rocket34.png"), SKTexture(imageNamed: "rocket35.png"), SKTexture(imageNamed: "rocket36.png")]
let rocketAnim = SKAction.animate(with: rocketAnimArray, timePerFrame: 0.016)
let rocketAnimForever = SKAction.repeatForever(rocketAnim)
rocket.position = position
rocket.size.height = 26
rocket.size.width = 64
let moveRocket = SKAction.moveBy(x: -rocketTex.size().width*1.7, y: 0, duration: 3)
rocket.run(SKAction.sequence([rocketAnimForever,moveRocket, SKAction.removeFromParent()]),withKey:"rocketFly")
rocketObject.addChild(rocket)
}
I create animation of rocket with this code, and a make SKAction.moveBy that works with simple textures, but dont works with animation. Can you help me how to move SKAction.animate?
Upvotes: 1
Views: 1368
Reputation: 274490
In this line:
rocket.run(SKAction.sequence([rocketAnimForever,moveRocket, SKAction.removeFromParent()]),withKey:"rocketFly")
You are telling the sprite node to run an action forever (rocketAnimForever
) and after that action finishes, move the rocket and remove it from parent. Since the first action carries on forever, you will never reach the other two actions.
To fix this, you need to run the rocketAnimForever
action at the same time as the move and remove from parent action sequence.
First, we can use sequence
to create a sequence of the last two actions:
let moveAndRemoveSequence = SKAction.sequence([moveRocket, SKAction.removeFromParent()])
Then, we use the group
method to group the animation action and the action sequence together so that they run at the same time:
let wholeAction = SKAction.group([rocketAnimForever, moveAndRemoveSequence])
Now you can run
the wholeAction
:
rocket.run(wholeAction, withKey: "rocketFly")
Upvotes: 2