为什么我的 .delaysTouchesBegan 不能始终如一地工作?
Why does my .delaysTouchesBegan not work consistently?
将 .delaysTouchesBegan = true 更改为 = false 通常在我的游戏中有效,但是,每隔一段时间它就会卡在 true 并且不会切换回 false,除非我关闭应用程序并重新打开。
该游戏类似于 Flappy Birds,但在 touchesBegan 开始游戏之前,您可以选择向左或向右滑动以更改颜色、音乐等。所以我需要 .delaysTouchesBegan 为 'true'在接触开始之前。这是一个间歇性问题,所以我不确定可能是什么原因。
我已经在我的 GameScene 中创建了我的滑动手势 class:
let swipeRightRec = UISwipeGestureRecognizer()
let swipeLeftRec = UISwipeGestureRecognizer()
然后我将这个函数添加到我的 didMove(to view):
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
}
}
然后在touchesBegan:
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 作为预防措施,但我仍然得到相同的结果。
即使我得到打印(触摸不应该被延迟),偶尔它们仍然会被延迟并且不会切换回来,即使在我的 "Flappy Bird" 死后重新呈现我的 GameScene 之后也是如此。
我什至尝试将上面的代码添加到我的更新方法中,但仍然没有成功。
我最终将代码放入我的更新函数中,它解决了问题。它现在始终如一地工作。我确定这不是放置代码的最佳位置,但它是解决问题的唯一位置。
override func update(_ currentTime: TimeInterval) {
if gameState == .startScreen {
swipeLeftRec.delaysTouchesBegan = true
swipeRightRec.delaysTouchesBegan = true
} else {
swipeLeftRec.delaysTouchesBegan = false
swipeRightRec.delaysTouchesBegan = false
}
将 .delaysTouchesBegan = true 更改为 = false 通常在我的游戏中有效,但是,每隔一段时间它就会卡在 true 并且不会切换回 false,除非我关闭应用程序并重新打开。
该游戏类似于 Flappy Birds,但在 touchesBegan 开始游戏之前,您可以选择向左或向右滑动以更改颜色、音乐等。所以我需要 .delaysTouchesBegan 为 'true'在接触开始之前。这是一个间歇性问题,所以我不确定可能是什么原因。
我已经在我的 GameScene 中创建了我的滑动手势 class:
let swipeRightRec = UISwipeGestureRecognizer()
let swipeLeftRec = UISwipeGestureRecognizer()
然后我将这个函数添加到我的 didMove(to view):
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
}
}
然后在touchesBegan:
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 作为预防措施,但我仍然得到相同的结果。
即使我得到打印(触摸不应该被延迟),偶尔它们仍然会被延迟并且不会切换回来,即使在我的 "Flappy Bird" 死后重新呈现我的 GameScene 之后也是如此。
我什至尝试将上面的代码添加到我的更新方法中,但仍然没有成功。
我最终将代码放入我的更新函数中,它解决了问题。它现在始终如一地工作。我确定这不是放置代码的最佳位置,但它是解决问题的唯一位置。
override func update(_ currentTime: TimeInterval) {
if gameState == .startScreen {
swipeLeftRec.delaysTouchesBegan = true
swipeRightRec.delaysTouchesBegan = true
} else {
swipeLeftRec.delaysTouchesBegan = false
swipeRightRec.delaysTouchesBegan = false
}