2015-04-01 28 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

相關問題