Move SKAction.animate in SpriteKit

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

Answers (1)

Sweeper
Sweeper

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

Related Questions