Xcode 为什么SKNode不是';在SpriteKit游戏中对触摸没有反应?

Xcode 为什么SKNode不是';在SpriteKit游戏中对触摸没有反应?,xcode,swift,sprite-kit,Xcode,Swift,Sprite Kit,为了在SpriteKit游戏中暂停,我制作了一个暂停按钮。当我想在另一个场景中暂停并对触摸做出反应时,它就像一个魔咒,正在过渡到一个场景。然后,我的功能开始运行(P.S.pause=暂停按钮),但它还有其他问题,我决定在主场景中暂停:playsecene 因此,我添加了一个pauseBackground和resumeButton,该按钮连接到pause background并将其隐藏(声明为resumeButton.hidden=true) 现在我的函数如下所示: override func t

为了在SpriteKit游戏中暂停,我制作了一个暂停按钮。当我想在另一个场景中暂停并对触摸做出反应时,它就像一个魔咒,正在过渡到一个场景。然后,我的功能开始运行(P.S.
pause
=暂停按钮),但它还有其他问题,我决定在主场景中暂停:
playsecene
因此,我添加了一个
pauseBackground
resumeButton
,该按钮连接到pause background并将其隐藏(声明为
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()

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

  • 给暂停按钮起个名字。控制是否在触摸中触摸了暂停按钮从打印被触摸节点的名称开始

  • 控制触摸节点的位置和暂停按钮。将暂停按钮的Z位置设置为1000,然后尝试触摸它

  • 编辑:

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

    node1.zPosition = 100.0f;
    pauseButton.zPosition = 200.0f;
    
    “连续”按钮位于场景上方

    continueButton.zPosition = 250.0f;
    
    这意味着,pauseButton的位置在父节点node1上方200。连续按钮(250)的Z位置小于场景上方暂停按钮的Z位置,尽管Z位置似乎小于(200)。这是因为暂停按钮的位置在场景上方300处。父节点的Z位置对于控制其子节点和场景中其他节点的Z位置非常重要


    Z节点的位置始终相对于其父节点。您的两个按钮(暂停和恢复按钮)是否具有相同的父节点?控制触摸节点的最佳方法是为每个节点指定一个名称和一个zPosition,并在touchesStart中打印该名称和zPosition(使用NSLog()/println())。通过这个,您可以准确地知道哪个节点被触摸,并且知道它的位置。因此,您可以更正每个节点的位置,以便它可以根据您的需要工作。

    哇,它工作了!你能解释一下原因吗?我从来没有坐过我的戏场。为什么是1000?在那之后,我试图将暂停按钮zPosition设置为4和500,但没有成功!所以,为了向玩家显示
    pauseBackground
    resumeButton
    ,我应该让他们的ZPosition=1001?我的意思是我的
    pauseButton
    工作,场景暂停。但是它没有显示我的
    pauseBackground
    resumeButton
    节点。然而,当我点击
    resumeButton
    应该出现的位置时,游戏没有暂停。zPositions对于从后到前排列节点很重要。请阅读:了解apple文档中节点树的绘图顺序:。我总是设置:
    view.ignoresSiblingOrder=YES
    ,并为每个节点设置zPosition。所以,我对节点的排序和触摸都没有问题。如果这解决了你的问题,请接受我的回答。谢谢。是的,我了解zPosition的功能,并将
    ignoresSiblingOrder
    设置为true。我只是好奇为什么你建议1000,因为它有效,但其他数字没有。不过,非常感谢!我还不明白,但已经有点效果了:谢谢!我读了那一页文档,但我仍然不明白为什么
    pauseButton
    可以工作,但我的简历按钮和暂停背景不可见!我试了很多zPosition数字(也有+1)。另外,如果我试图将它们的zPositions设置为高于pauseButton编号1000的数字,pauseButton将停止工作。