Sprite Kit场景不会出现

问题描述:

我目前正在制作一个由三个场景组成的游戏,GameScene,ArcheryScene和GameOverScene。当我开始游戏时,GameScene呈现得很好,然后我点击屏幕开始游戏,ArcheryScene呈现得很好。 GameOverScene在游戏中进行联系时被触发,并且它也可以工作。但是,一旦呈现GameOverScene,我希望能够点击屏幕返回到射箭场并重新开始游戏。但是,当我点击屏幕时,根本没有任何反应。任何意见或建议将不胜感激,谢谢。触碰时会呈现ArcherySceneSprite Kit场景不会出现

GameScene代码:(作品)

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 */ 
    } 
} 
呈现时,接触时的GameOverScene

ArcheryScene代码:(作品)

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

gameOverNode does nt存在。你说的let gameOverNode = childNodeWithName("gameOverNode") .. gameOverNode是零!这没什么,并且条件语句中的代码块不会做任何事情。

您需要添加名为“gameOverNode”的节点才能引用它。 childNodeWithName引用了一个已经存在于你的场景中的节点..它没有创建一个新节点。

+0

但是gameOverNode确实存在。就像welcomeNode存在于GameScene文件中一样。并且为了证明这不是问题,我将if语句语句更改为:'if(gameOverNode == nil)',但仍然没有使代码运行。那么我完全把if语句拿出来了,它仍然不起作用,还有其他建议吗? – BCRwar1

+0

在gameOverNode中放置了一个println?.runAction 在日志中显示了什么? – hamobi

+0

我刚刚试过你说的话,没有出现在日志中。我也尝试在gameOverNode?.runAction之外放置println,它位于touchesBegan()函数的正下方。当我在屏幕上点击时没有出现在日志中..我无能为力,为什么这不起作用。我看不到任何我做错了的事情。 – BCRwar1