Почему мой .delaysTouchesBegan не работает последовательно? - PullRequest
0 голосов
/ 26 октября 2018

Изменение .delaysTouchesBegan = true на = false ПОЛЕЗНО работает в моей игре, однако, время от времени оно застревает на true и не переключится обратно на false, если я не закрою приложение и не открою снова.

Игра похожа на Flappy Birds, но перед тем, как touchSegan запускает игру, у вас есть возможность провести пальцем влево или вправо, чтобы изменить цвета, музыку и т. Д. Поэтому мне нужно, чтобы .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» умрет.

Я даже пытался добавить приведенный выше код в мой метод обновления, но все еще не повезло.

1 Ответ

0 голосов
/ 11 декабря 2018

Я закончил тем, что поместил код в свою функцию обновления, и это решило проблему. Это работает последовательно сейчас. Я уверен, что это не лучшее место для размещения кода, но это единственное место, которое решило проблему.

override func update(_ currentTime: TimeInterval) {

    if gameState == .startScreen {
        swipeLeftRec.delaysTouchesBegan = true
        swipeRightRec.delaysTouchesBegan = true
    } else {
        swipeLeftRec.delaysTouchesBegan = false
        swipeRightRec.delaysTouchesBegan = false
    }
...