为了在SpriteKit游戏中暂停,我做了一个暂停按钮。当我想让另一个场景暂停并且对触摸的响应正在转换到一个场景时,它就像一个魅力。我的函数然后看了like this(P.S。pause
=暂停按钮)但是还有其他问题,我决定在我的主场景中暂停:playscene
所以我添加了pauseBackground
和resumeButton
附加到暂停背景并隐藏它(声明为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()
}
}
可悲的是,它也没有用!我真的不知道为什么它没有在那个位置检测到触摸。
答案 0 :(得分:1)
为暂停按钮命名。通过打印触摸节点的名称来控制是否触摸了touchesBegan中的暂停按钮。
控制触摸节点的zPosition和暂停按钮。设置暂停按钮的zPosition = 1000并尝试触摸它。
编辑:
假设节点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,以便它可以根据需要运行。