2015-01-08 4 views
0

В настоящее время я работаю над игрой, состоящей из трех сцен: GameScene, ArcheryScene и GameOverScene. Когда я запускаю игру, GameScene прекрасно выглядит, а затем я нажимаю на экран, чтобы начать игру, и ArcheryScene прекрасно выглядит. GameOverScene запускается, когда в игре создается контакт, и он также работает. Однако, как только GameOverScene будет представлен, я хотел бы получить доступ к экрану, чтобы вернуться в ArcheryScene и перезапустить игру. Однако, когда я нажимаю на экран, ничего не происходит. Любые советы или предложения были бы очень благодарны, спасибо.Sprite Kit Сцена не указана

GameScene код, который представляет ArcheryScene при постукивании: (работ)

import UIKit 
import SpriteKit 

class GameScene: SKScene { 

    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

    } 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 

    let welcomeNode = childNodeWithName("welcomeNode") 

     if (welcomeNode != nil) { 
      let fadeAway = SKAction.fadeOutWithDuration(1.0) 

      welcomeNode?.runAction(fadeAway, completion: { 
       let doors = SKTransition.pushWithDirection(SKTransitionDirection.Down, duration: 1.0) 
       let archeryScene = ArcheryScene(fileNamed: "ArcheryScene") 
       archeryScene.scaleMode = .AspectFill 
       self.view?.presentScene(archeryScene, transition: doors) 
      }) 
     } 

    } 

    override func update(currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 
    } 
} 

ArcheryScene код, который представляет GameOverScene когда контакт сделан: (работ)

let fadeOut = SKAction.sequence([SKAction.waitForDuration(3.0)]) 
      let welcomeReturn = SKAction.runBlock({ 
       let Transition = SKTransition.revealWithDirection(SKTransitionDirection.Down, duration: 1.0) 
       let gameOverScene = GameScene(fileNamed: "GameOverScene") 
       gameOverScene.scaleMode = .AspectFill 
       self.scene!.view?.presentScene(gameOverScene, transition: Transition) 
      }) 
      let sequence = SKAction.sequence([fadeOut, welcomeReturn]) 
      self.runAction(sequence) 

GameOverSceneCode, который представляет ArcheryScene при использовании: (не работает)

import UIKit 
import SpriteKit 

class GameOverScene: SKScene { 

    override func didMoveToView(view: SKView) { 
     /* Setup your scene here */ 

    } 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     /* Called when a touch begins */ 

     let gameOverNode = childNodeWithName("gameOverNode") 

     if (gameOverNode != nil) { 

      let fadeAway2 = SKAction.fadeOutWithDuration(1.0) 

      gameOverNode?.runAction(fadeAway2, completion: { 
       let doors2 = SKTransition.pushWithDirection(SKTransitionDirection.Down, duration: 1.0) 
       let archeryScene = ArcheryScene(fileNamed: "ArcheryScene") 
       archeryScene.scaleMode = .AspectFill 
       self.view?.presentScene(archeryScene, transition: doors2) 
      }) 
     } 

    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
    } 
} 
+0

Выполняется ли событие касания? Установите точку останова, чтобы узнать. – LearnCocos2D

+0

Я просто пробовал это, прикосновение даже не работает – BCRwar1

+0

затем установите self.userInteractionEnabled = YES – LearnCocos2D

ответ

0

играOverNode делает nt существует. Youre говорит let gameOverNode = childNodeWithName("gameOverNode") .. gameOverNode - это нуль! Это ничего, и поэтому блок кода в условном выражении не делает ничего.

вам необходимо добавить узел с именем «gameOverNode», чтобы ссылаться на него. childNodeWithName ссылается на узел, который уже существует в вашей сцене .. его не создает новый.

+0

Но gameOverNode действительно существует. Так же, как welcomeNode существует в файле GameScene. И чтобы доказать, что это не проблема, я изменил инструкцию оператора if: «if (gameOverNode == nil)», и это все еще не запустило код. Итак, я принял окончательное утверждение if и все еще не работал, никаких других предложений? – BCRwar1

+0

положить println в игреOverNode? .runAction все что-нибудь появляется в журнале? – hamobi

+0

Я просто попробовал то, что вы сказали, ничего не появилось в журнале. Также я попытался разместить println вне gameOverNode? .runAction, непосредственно под функцией touchhesBegan(). Ничего не появилось в журнале, когда я постучал по экрану. Я не знаю, почему это не работает. Я не вижу ничего, что я сделал неправильно. – BCRwar1