Почему мой.delaysTouchesBegan не работает последовательно?
Изменение.delaysTouchesBegan = true на = false ПОЛЕЗНО работает в моей игре, однако, время от времени оно застревает на true и не переключится обратно на false, если я не закрою приложение и не открою снова.
Игра похожа на Flappy Birds, но перед тем, как touchchesBegan запускает игру, у вас есть возможность провести пальцем влево или вправо, чтобы изменить цвета, музыку и т. Д. Поэтому мне нужно, чтобы.delaysTouchesBegan был "true", прежде чем начнутся касания. Это временная проблема, поэтому я не уверен, что может быть причиной.
Я создал свои жесты смахивания в своем классе GameScene:
let swipeRightRec = UISwipeGestureRecognizer()
let swipeLeftRec = UISwipeGestureRecognizer()
Затем я добавил эту функцию в свой didMove(для просмотра):
func addSwipes(){
swipeRightRec.addTarget(self, action: #selector(GameScene.swipedRight) )
swipeRightRec.direction = .right
self.view!.addGestureRecognizer(swipeRightRec)
swipeLeftRec.addTarget(self, action: #selector(GameScene.swipedLeft) )
swipeLeftRec.direction = .left
self.view!.addGestureRecognizer(swipeLeftRec)
if gameState == .showingLogo {
swipeLeftRec.delaysTouchesBegan = true
swipeRightRec.delaysTouchesBegan = true
}
}
Потом в контакте началось:
if swipeLeftRec.delaysTouchesBegan == true || swipeRightRec.delaysTouchesBegan == true {
swipeLeftRec.delaysTouchesBegan = false
swipeRightRec.delaysTouchesBegan = false
self.view?.removeGestureRecognizer(swipeLeftRec)
self.view?.removeGestureRecognizer(swipeRightRec)
print("Touches should not be delayed")
}
Я пробовал его внутри и вне оператора if и использовал removeGestureRecognizer просто в качестве меры предосторожности, но я все равно получаю тот же результат.
Даже если я получу отпечаток (касания не должны быть отложены), иногда они все равно будут задерживаться и не переключатся обратно, даже после повторного представления моей GameScene после смерти моей "Flappy Bird".
Я даже попытался добавить приведенный выше код в мой метод обновления, но все еще не повезло.
0 ответов
Я закончил тем, что поместил код в свою функцию обновления, и это решило проблему. Это работает последовательно сейчас. Я уверен, что это не лучшее место для размещения кода, но это единственное место, которое решило проблему.
override func update(_ currentTime: TimeInterval) {
if gameState == .startScreen {
swipeLeftRec.delaysTouchesBegan = true
swipeRightRec.delaysTouchesBegan = true
} else {
swipeLeftRec.delaysTouchesBegan = false
swipeRightRec.delaysTouchesBegan = false
}