当我从我的菜单场景切换到我的gamescene时,它工作得非常好。但是,当我试图回到过去的时候,却是一场灾难。我得到:在展开可选值时意外发现nil。返回的代码是:
let menuscene = MenuScene(size: self.size)
menuscene.scaleMode = scaleMode
self.view?.presentScene(menuscene)
它说错误来自的代码是:
PlaygamebtnNode = self.childNode(withName: "PlaygamebtnNode") as! SKSpriteNode
NamelblNode = self.childNode(withName: "NamelblNode") as! SKLabelNode
这很奇怪,因为当游戏启动时,它可以使用以下代码。错误必须来自视图/场景中的更改。入口MenuScene类的代码是:
import SpriteKit
import GameplayKit
class MenuScene: SKScene {
var PlaygamebtnNode:SKSpriteNode!
var NamelblNode:SKLabelNode!
override func didMove(to view: SKView) {
PlaygamebtnNode = self.childNode(withName: "PlaygamebtnNode") as! SKSpriteNode
NamelblNode = self.childNode(withName: "NamelblNode") as! SKLabelNode
PlaygamebtnNode.texture = SKTexture(imageNamed: "Playgamebtn")
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if let location = touch?.location(in: self){
let nodesArray = self.nodes(at: location)
if nodesArray.first?.name == "PlaygamebtnNode" {
let transition = SKTransition.flipHorizontal(withDuration: 0.5)
let nextScene = GameScene(size: self.size)
self.view?.presentScene(nextScene, transition: transition)
}
}
}
}
在展开可选值问题时,这不是一个普通的找到nil的原因,因为在我尝试返回菜单之前,它不会显示此错误。
发布于 2017-05-03 19:06:01
问题从这一行开始:
PlaygamebtnNode = self.childNode(withName: "PlaygamebtnNode") as! SKSpriteNode
因为就像我说的,self.childNode(withName:)
会返回nil
然而,真正的问题与这一行(在leavegamefunc()
内部)有关:
let menuscene = MenuScene(size: self.size)
您在MenuScene.sks中定义了PlaygamebtnNode
,并且使用了错误的初始值设定项(MenuScene.init(size:)
)。
解决方案:
func leavegamefunc() {
if let menuScene = MenuScene(fileNamed: "MenuScene"){
menuScene.scaleMode = scaleMode
self.view?.presentScene(menuScene)
}
}
https://stackoverflow.com/questions/43753394
复制相似问题