Error al volver a una vista anterior en Swift 3 Spritkit
swift3 sprite-kit (1)
El problema comenzó con esta línea:
PlaygamebtnNode = self.childNode(withName: "PlaygamebtnNode") as! SKSpriteNode
porque como dije, self.childNode(withName:)
volvía a nil
El problema real sin embargo estaba relacionado con esta línea (dentro de leavegamefunc()
):
let menuscene = MenuScene(size: self.size)
Ha definido su PlaygamebtnNode
en MenuScene.sks y está utilizando el inicializador incorrecto ( MenuScene.init(size:)
).
La solución:
func leavegamefunc() {
if let menuScene = MenuScene(fileNamed: "MenuScene"){
menuScene.scaleMode = scaleMode
self.view?.presentScene(menuScene)
}
}
Cuando cambio a mi escena de mi escena de menú, funciona perfectamente bien. Pero, cuando trato de regresar, es un desastre. Obtengo: encontrado inesperadamente nulo mientras desenvuelvo un valor opcional. El código para regresar es:
let menuscene = MenuScene(size: self.size)
menuscene.scaleMode = scaleMode
self.view?.presentScene(menuscene)
El código del que dice que proviene el error es:
PlaygamebtnNode = self.childNode(withName: "PlaygamebtnNode") as! SKSpriteNode
NamelblNode = self.childNode(withName: "NamelblNode") as! SKLabelNode
Esto es extraño porque cuando el juego se inicia, está bien con este código. El error tiene que provenir del cambio en las vistas / escenas. De antemano gracias por su ayuda. El código para la clase entrie MenuScene es:
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)
}
}
}
La razón por la que no se encuentra nada común mientras se desenvuelve una pregunta de valor opcional es porque no muestra este error hasta que intento volver al menú.