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

Why SKNode isn't reacting to touch in SpriteKit game?

为了在 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并尝试触摸它。

编辑:

假设节点node1是pauseButton的父节点。

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

继续按钮在场景上方

continueButton.zPosition = 250.0f;

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

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