我的 SpriteKit 游戏中有几个 SKSpriteNode,例如暂停背景和游戏结束场景以及按钮。现在,我在 didMoveToView 中声明并添加它们,并使用如下内容:
let pauseButton = SKSpriteNode(imageNamed: "pauseButton")
let pauseBackground = SKSpriteNode (imageNamed: "pauseBackground")
let resumeButton = SKSpriteNode (imageNamed: "resumeButton")
然后,我正在初始化它们:
self.pauseButton.anchorPoint = CGPointMake(0.5, 0.5)
self.pauseButton.position = CGPointMake(CGRectGetWidth(self.frame) - self.cookieSpot / 3, CGRectGetMaxY(self.frame) - self.cookieSpot / 3)
pauseButton.size = self.pauseButton.size
pauseButton.name = "pauseButton"
pauseButton.zPosition = 1000
pauseBackground.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
self.pauseBackground.hidden = true
self.pauseBackground.name = "pauseBackground"
self.pauseBackground.zPosition = +1
resumeButton.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame) + self.resumeButton.size.height * 2 + self.resumeButton.size.height - self.resumeButton.size.height / 4)
self.resumeButton.hidden = true
self.resumeButton.name = "resumeButton"
self.resumeButton.zPosition = +1
然后添加它们:
self.addChild(pauseBackground)
self.addChild(resumeButton)
self.addChild(gameOverBackground)
当不需要它并且当用户点击暂停按钮时,我正在尝试使用这样的东西:
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
switch self.nodeAtPoint(location) {
case pauseButton:
self.pauseBackground.hidden = false
self.resumeButton.hidden = false
self.scene?.view?.paused = true
case resumeButton:
self.pauseBackground.hidden = true
self.resumeButton.hidden = true
self.scene?.view?.paused = false
default:
println("not good")
}
}
那根本不适合我。我猜他们正在产卵,但他们是看不见的。如何在不需要节点时存储这些节点并在适当的时候生成它们?
请您参考如下方法:
添加节点在 runloop 结束时完成并且您在此之前暂停了 View ...我想问题与此有关(对其进行了测试,我得到了相同的结果)。在 Obj-C 中,一个简单的解决方法是使用 performSelector描述的方法 here .在 Swift 中它变得更棘手,你应该使用类似 dispatch_after 的东西或者使用类似 this 的东西(使用 NSTimer)。希望这个对你有帮助。这也不是一个确定的答案,对于同一个问题可能有更多的解决方案。
编辑:
我刚刚发现可行 solution (暂停在某些方法中移动):
func pauseGame()
{
self.scene?.view?.paused = true
}
然后在touchesBegan中调用
self.runAction(SKAction.runBlock(self.pauseGame))
您的 touchesBegan 应该看起来像这样:
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch: AnyObject in touches {
let location = touch.locationInNode(self)
switch self.nodeAtPoint(location) {
case pauseButton:
self.pauseBackground.hidden = false
self.resumeButton.hidden = false
self.runAction(SKAction.runBlock(self.pauseGame))
case resumeButton:
self.pauseBackground.hidden = true
self.resumeButton.hidden = true
self.scene?.view?.paused = false
default:
println("not good")
}
}
}
