[ios]Spritekit-在.sks 文件中创建的场景是空白从另一个场景转换时

标签: sprite-kit ios Swift
发布时间: 2017/4/3 22:01:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个主菜单场景,在那里当按下按钮时它应过渡到另一个场景。 似乎是要以正确的过渡,但当它做了转换场景二为空白。 我将断点放在场景二 didMove 函数,它似乎正常运行。 我知道场景二工作正常时从 GameViewController 直接打开。 我不知道为什么它是空白的从另一个场景转换时。 这里是我当前的代码︰

class StartScene: SKScene {

  var playButton = SKSpriteNode()
  let playButtonTex = SKTexture(imageNamed: "BlueRoundedButton")

  override func didMove(to view: SKView) {

    playButton = SKSpriteNode(texture: playButtonTex)
    playButton.size = CGSize(width: 200, height: 50)
    playButton.position = CGPoint(x: frame.midX, y: frame.midY)
    self.addChild(playButton)
  }

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let touch = touches.first {
      let pos = touch.location(in: self)
      let node = self.atPoint(pos)

      if node == playButton {
        if let view = view {
          let transition:SKTransition = SKTransition.fade(withDuration: 1)
          let scene:SKScene = PoolScene(size: self.size)
          self.view?.presentScene(scene, transition: transition)
        }
      }
    }
  }
}

这是过渡到现场︰

class PoolScene: SKScene, SKPhysicsContactDelegate {

  var ballPoke : SKSpriteNode?
  var ballBlue : SKSpriteNode?
  var ballOrange : SKSpriteNode?


  override func didMove(to view: SKView) {

    let borderBody = SKPhysicsBody(edgeLoopFrom: self.frame)
    borderBody.friction = 0
    self.physicsBody = borderBody

    self.physicsWorld.gravity = CGVector(dx: 0, dy: 0)
    physicsWorld.contactDelegate = self

    ballBlue = childNode(withName: blueBallName) as? SKSpriteNode
    ballOrange = childNode(withName: orangeBallName) as? SKSpriteNode
    ballPoke = childNode(withName: pokeBallName) as? SKSpriteNode


    ballBlue?.physicsBody?.categoryBitMask = blueBallCategory
    ballOrange?.physicsBody?.categoryBitMask = orangeBallCategory
    ballPoke?.physicsBody?.categoryBitMask = pokeBallCategory
    borderBody.categoryBitMask = borderCategory


  }

解决方法 1:

你打错了 init 方法来加载您的 PoolScene。你做的方法是当您不使用 Xcode 视觉关卡编辑器。 像你的 GameViewController,您需要初始化场景与对相应的.sks 文件的引用。

 if node == playButton {
     if let view = view {
        let transition = SKTransition.fade(withDuration: 1)

         if let scene = PoolScene(fileNamed: "PoolScene") {
              view.presentScene(scene, transition: transition)
         }
      }
  }

或以略为简洁的方式

  if node == playButton {
     let transition = SKTransition.fade(withDuration: 1)

     if let scene = PoolScene(fileNamed: "PoolScene") {
         view?.presentScene(scene, transition: transition)    
      }
  }

"里:......"为你的 PoolScene,你通常给相同的确切名称是.sks 文件的名称。 swift文件。使用警卫或如果让因为它将返回一个可选。

作为一个小的技巧,使使用的雨燕类型推理使您的代码有点我喜欢在我的示例。

希望这有助于

官方微信
官方QQ群
31647020