【问题标题】:Why does my .delaysTouchesBegan not work consistently?为什么我的 .delaysTouchesBegan 无法始终如一地工作?
【发布时间】:2018-10-26 02:41:39
【问题描述】:

将 .delaysTouchesBegan = true 更改为 = false 通常在我的游戏中有效,但是,每隔一段时间它就会卡在 true 并且不会切换回 false,除非我关闭应用程序并重新打开。

该游戏类似于 Flappy Birds,但在 touchesBegan 开始游戏之前,您可以选择向左或向右滑动来更改颜色、音乐等。所以我需要 .delaysTouchesBegan 在触摸开始之前为“真”。这是一个间歇性问题,所以我不确定可能是什么原因。

我在我的 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

    }
}

然后在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 之后。

我什至尝试将上述代码添加到我的更新方法中,但仍然没有成功。

【问题讨论】:

    标签: swift swipe uiswipegesturerecognizer touchesbegan intermittent


    【解决方案1】:

    我最终将代码放入我的更新函数中,它解决了问题。它现在一直有效。我确定这不是放置代码的最佳位置,但它是解决问题的唯一位置。

    override func update(_ currentTime: TimeInterval) {
    
        if gameState == .startScreen {
            swipeLeftRec.delaysTouchesBegan = true
            swipeRightRec.delaysTouchesBegan = true
        } else {
            swipeLeftRec.delaysTouchesBegan = false
            swipeRightRec.delaysTouchesBegan = false
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多