xcode - 为什么 SKNode 在 SpriteKit 游戏中对触摸没有反应?

标签 xcode swift sprite-kit

为了在 SpriteKit 游戏中暂停,我制作了一个暂停按钮。当我想制作另一个暂停场景并响应触摸正在过渡到一个场景时,它就像一个魅力。然后我的函数看起来 like this (P.S. pause = 暂停按钮)但是它还有其他问题,我决定在我的主场景中暂停:playscene 所以我添加了一个 pauseBackgroundresumeButton 附加到暂停背景并将其隐藏(声明 resumeButton.hidden = true) 现在我的函数看起来像这样:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    if self.onGround {
        self.speedY = -20.0
        self.onGround = false
    }
    for touch: AnyObject in touches {
    let location = touch.locationInNode(self)
        if self.nodeAtPoint(location) == self.pause {
        self.scene?.view?.paused = true
        self.pauseBackground.hidden = false
        self.resumeButton.hidden = false
        if self.nodeAtPoint(location) == self.resumeButton {
        self.pauseBackground.hidden = true
        self.resumeButton.hidden = true
        self.scene?.view?.paused = false
            }
        }
    }
}

这很有趣,因为它适用于场景转换,但现在 Xcode 无法检测或忽略我在暂停按钮位置的点击。我真的不知道为什么。请你帮助我好吗? 更新:我试过 switch 语句:

for touch: AnyObject in touches {
    let location = touch.locationInNode(self)
        switch self.nodeAtPoint(location) {
        case self.pause:
        self.scene?.view?.paused = true
        self.pauseBackground.hidden = false
        self.resumeButton.hidden = false
        case self.resumeButton:
        self.pauseBackground.hidden = true
        self.resumeButton.hidden = true
        self.scene?.view?.paused = false
        default:
        println()

    }
}

遗憾的是,它也不起作用!我真的不知道为什么它没有检测到那个位置的触摸。

最佳答案

  1. 为您的暂停按钮命名。通过打印被触摸节点的名称来控制是否在 touchesBegan 中触摸暂停按钮。

  2. 控制触摸节点的zPosition和暂停按钮。设置暂停按钮的 zPosition = 1000 并尝试触摸它。

编辑:

enter image description here

比方说,节点node1是pauseButton的父节点。

node1.zPosition = 100.0f;
pauseButton.zPosition = 200.0f;

continueButton 在场景之上

continueButton.zPosition = 250.0f;

也就是说,pauseButton的zPosition比父节点node1高200。 continueButton的zPosition(250)小于场景上方的pauseButton的zPosition,虽然zPosition好像少了(200)。那是因为 pauseButton 的 zPosition 在场景上方 300。父节点的zPosition对于控制子节点和场景中其他节点的zPosition非常重要。

节点的 zPosition 总是相对于它的父节点。您的两个按钮(暂停和恢复按钮)是否具有相同的父节点?控制触摸节点的最好方法是给每个节点一个名称和一个 zPosition,并在 touchesBegan 中打印这个(名称和 zPosition with NSLog()/println())。有了这个你就知道哪个节点被触摸了,你知道它的 zPosition。因此,您可以更正每个节点的 zPosition,使其按您的需要工作。

关于xcode - 为什么 SKNode 在 SpriteKit 游戏中对触摸没有反应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29320554/

相关文章:

ios - 如果一个框架导入了主项目也导入的一些库怎么办?

ios - UITextView _firstBaselineOffsetFromTop 断言失败

ios - 来自 textField 的具有 2 位小数的 FloatValue

swift - 获取 WKInterfacePicker 的选中项

ios - 对 iOS 上 SpriteKit 中的坐标、框架和子节点感到困惑?

在 indexPath.row 的数组中快速打印元素

xcode - 在终端中测试时如何更改默认的 Xcode iphone 模拟器?

swift - 碰撞 --> 不要与颜色开关等任何东西发生碰撞

ios - SpriteKit : SKPhysicsBody slips away

swift - 连续的单元测试失败,尽管它们单独成功