У меня есть виртуальная панель управления в моей игре. Если я коснусь и удерживаю одну из кнопок со стрелками, проигрыватель перемещается в правильном направлении и показывает правильные изображения и анимацию. Однако, если я перемещаю палец от одного элемента управления к другому (скажем, справа вниз), игрок перемещается вниз, но изображение и анимация не меняются, пока я не подниму палец. Ниже мой код для обработки касаний:
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()
}
Мой код для изменения анимации игрока:
func idlePlayer() {
removeAllActions()
}
func walkLRPlayer() {
removeAllActions()
run(SKAction.repeatForever(walkLRAnimation!))
}
func walkUpPlayer() {
removeAllActions()
run(SKAction.repeatForever(walkUpAnimation!))
}
func walkDownPlayer() {
removeAllActions()
run(SKAction.repeatForever(walkDownAnimation!))
}
Любые предложения будут с благодарностью.