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