Xcode 为什么SKNode不是';在SpriteKit游戏中对触摸没有反应?
为了在SpriteKit游戏中暂停,我制作了一个暂停按钮。当我想在另一个场景中暂停并对触摸做出反应时,它就像一个魔咒,正在过渡到一个场景。然后,我的功能开始运行(P.S.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
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()
}
}
可悲的是,它也不起作用!我真的不知道为什么它没有在那个位置检测到触摸
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将停止工作。