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

时间:2015-03-28 17:52:49

标签: 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 个答案:

答案 0 :(得分:1)

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

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

  3. 编辑:

    enter image description here

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

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

    continueButton位于场景之上

    continueButton.zPosition = 250.0f;
    

    这意味着,pauseButton的zPosition在父节点node1之上是200。 continueButton(250)的zPosition小于场景上方pauseButton的zPosition,尽管zPosition似乎更少(200)。那是因为pauseButton的zPosition高出场景300。父节点的zPosition对于控制其子节点和场景的其他节点的zPosition非常重要。

    z节点的位置始终相对于其父节点。让你的两个按钮(暂停和恢复按钮)都是同一个父节点?控制触摸节点的最佳方法是为每个节点指定一个名称和一个zPosition,并在touchesBegan中打印它(带有NSLog()/ println()的名称和zPosition)。通过这个,您可以确切地知道触摸了哪个节点,并且您知道它的zPosition。因此,您可以更正每个节点的zPosition,以便它可以根据需要运行。