I have a virtual control pad in my game. If I tap and hold on one of the direction buttons, the player moves in the correct direction and shows the proper images and animation. However, if I slide my finger from one control to another one (say right to down), the player moves down but the image and animation don't change until I lift my finger. Below is my code for handling the touches:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in (touches as! Set<UITouch>) {
let location = touch.location(in: cameraNode)
if upRect.contains(location) {
moveXDirection = 0
moveYDirection = 1
isIdle = false
playerSprite.walkUpPlayer()
} else if rightRect.contains(location) {
moveXDirection = 1
moveYDirection = 0
isIdle = false
playerSprite.walkLRPlayer()
} else if downRect.contains(location) {
moveXDirection = 0
moveYDirection = -1
isIdle = false
playerSprite.walkDownPlayer()
} else if leftRect.contains(location) {
moveXDirection = -1
moveYDirection = 0
isIdle = false
playerSprite.walkLRPlayer()
}
if !isIdle && moveXDirection != 0 {
playerSprite.xScale = moveXDirection
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in (touches as! Set<UITouch>) {
let location = touch.location(in: cameraNode)
if upRect.contains(location) {
moveXDirection = 0
moveYDirection = 1
isIdle = false
} else if rightRect.contains(location) {
moveXDirection = 1
moveYDirection = 0
isIdle = false
} else if downRect.contains(location) {
moveXDirection = 0
moveYDirection = -1
isIdle = false
} else if leftRect.contains(location) {
moveXDirection = -1
moveYDirection = 0
isIdle = false
}
if !isIdle && moveXDirection != 0 {
playerSprite.xScale = moveXDirection
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
idlePlayer()
}
My code for changing the player animation is:
func idlePlayer() {
removeAllActions()
}
func walkLRPlayer() {
removeAllActions()
run(SKAction.repeatForever(walkLRAnimation!))
}
func walkUpPlayer() {
removeAllActions()
run(SKAction.repeatForever(walkUpAnimation!))
}
func walkDownPlayer() {
removeAllActions()
run(SKAction.repeatForever(walkDownAnimation!))
}
Any suggestions would be greatly appreciated.