Proffan
Proffan

Reputation: 31

How to change position of SKSpriteNode with SKAction

while word != ""{

    if word[word.startIndex] == "R" {

        let moveSpriteToRight = SKAction.move(to: CGPoint(x: sprite.position.x+128, y: sprite.position.y), duration: 1)

        sprite.run(moveSpriteToRight)

    } else if word == "D" {

        let moveSpriteToDown = SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y-128), duration: 1)

        sprite.run(moveSpriteToDown)

    } else if word == "L" {

        let moveSpriteToLeft = SKAction.move(to: CGPoint(x: sprite.position.x-128, y: sprite.position.y), duration: 1)

        sprite.run(moveSpriteToLeft)

    } else if word == "U" {

        let moveSpriteToUp = SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y+128), duration: 1)

        sprite.run(moveSpriteToUp) 
    }

    word.remove(at: word.startIndex)
}

It's part of my code.I can't use SKAction many times. For example, if the word = "ULD", then the sprite should move along the path up (U), then left (L) and down (D). And each time through the gestures the user creates new trajectories, the termination of recording gestures occurs through touchesEnded. Sprite them must perform each time. But my sprite in simulator changes position to Down in this example and all.

Upvotes: 1

Views: 568

Answers (1)

Ron Myschuk
Ron Myschuk

Reputation: 6071

You can put your actions into an array and run them as a sequence once all the checking is done

let actions = [SKAction]()

while word != ""{

    if word[word.startIndex] == "R" {
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x+128, y: sprite.position.y), duration: 1))
    }

    if word == "D" {
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y-128), duration: 1))
    } 

    if word == "L" {
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x-128, y: sprite.position.y), duration: 1))
    } 

    if word == "U" {
        actions.append(SKAction.move(to: CGPoint(x: sprite.position.x, y: sprite.position.y+128), duration: 1))
    }

    word.remove(at: word.startIndex)
}

let sequenceOfActions = SKAction.sequence([actions])
sprite.run(sequenceOfActions) 

Upvotes: 1

Related Questions