我只是想用skimeternode和SKSpriteNode
但我的代码第二行有错误

startfield.position = CGPoint.init(x:0,y:1200)

错误就像
“致命错误:展开可选值时意外发现nil”
两次,还有这一次
“没有frZQaeyWLUvLjeuEK43hmg的沙盒访问权限,并且没有适当的权限”
我不明白可选的概念,所以我不能解决它。。
class GameScene: SKScene {

 var startfield : SKEmitterNode!
 var player : SKSpriteNode!

  override func didMove(to view: SKView) {
      startfield = SKEmitterNode(fileNamed: "Starfield")
      startfield.position = CGPoint.init(x: 0, y: 1200)
      startfield.advanceSimulationTime(10)
      self.addChild(startfield)
      startfield.zPosition = -1
        //define Player
    player = SKSpriteNode(imageNamed: "shuttle")
    player.position = CGPoint(x: self.frame.width/2, y: player.size.height/2 + 20)
    self.addChild(player)
  }

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

最佳答案

重新声明starfield变量(错误地键入为startfield?)使其允许零值:

var starfield: SKEmitterNode?

这是必需的,因为SKEmitterNode(fileNamed:)是一个可选的初始化程序,即可以返回nil的初始化程序。在进一步使用此变量测试之前,如果不为零,例如使用guard语句:
guard let starfield = starfield else { return }

因为函数的其余部分现在不是零。

10-06 02:55