2015-04-01 25 views
1

我在我的SpriteKit游戏中有几个SKSpriteNodes,像背景暂停和游戏结束场景和按钮。现在我宣布和didMoveToView加入他们,并使用了诸如:如何在需要时产生SKSpriteNode?

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") 

    } 
} 

这根本不适合我。他们正在产卵我猜,但他们是看不见的。在不需要的时候应该如何存储这些节点,并在适当的时候产生它们?

+0

“产卵”是什么意思? – sangony 2015-04-02 00:48:00

+0

这应该工作。也许它与暂停按钮的初始化?为我们发布 – MaxKargin 2015-04-02 00:50:32

+0

@sangony我的意思是将它们呈现在其他节点之上。例如,当用户点击一个按钮时,可以考虑出现在屏幕上的暂停场景。现在我在类中声明它,放置它们并在'didMoveToView'中执行'addChild'并将它们设置为隐藏。然后,当用户与暂停按钮交互时,我希望它们出现在其他节点上方。我尝试'hidden = false',但它们仍然是不可见的。尽管如果我点击简历按钮的位置,我可以取消暂停游戏。 @ M321K我已经更新了我的代码! – Burundanga 2015-04-02 11:05:59

回答

3

添加节点在runloop的末尾完成,并且在此之前暂停视图...我想问题与此有关(测试它并获得了相同的结果)。在Obj-C中,一个简单的解决方法是使用如here所述的performSelector方法。在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") 

      } 
     } 
    } 
+0

嗯,太好了!如果我理解你的话,让我说清楚。你建议在'self.pauseBackground.hidden = false'后面调用暂停SKAction 'self.resumeButton.hidden = false'在我的switch语句中?或者我应该重写所有touchesBegan函数? – Burundanga 2015-04-02 11:41:00

+0

只是尝试调用self.runAction(SKAction.runBlock(self.pauseGame))而不是self.scene?.view?.paused = true ...它应该工作(适用于我)。 – Whirlwind 2015-04-02 11:45:16

+0

是的!它完全工作!我感谢你@Whirlwind!最后我可以继续说下去:D – Burundanga 2015-04-02 14:29:23

相关问题