Clase SKScene colapsando, “No se puede agregar el cuerpo …”
Para lograr una simplicidad visual y colocar el nodo en la ubicación correcta, creo un archivo.sks llamado “ECAM_DOOR.sks”.
Para agregar algo de lógica a mi aplicación, luego creo otra escena donde quiero cargar la escena que creé desde el editor.
Pero estoy obteniendo el siguiente error:
“
Terminación de la aplicación debido a una excepción no capturada ‘No se puede agregar el cuerpo, ya existe en un mundo’, motivo: ‘No se puede agregar el cuerpo
import Foundation
import SpriteKit
import SceneKit
class DOORS: SKScene, SKSceneDelegate {
var systems: PlaneSystems
init(size: CGSize, systems: PlaneSystems) {
self.systems = systems
super.init(size: size)
self.isPaused = false
delegate = self
prepareScene()
}
required init?(coder aDecoder: NSCoder) {
fatalError(“init(coder:) has not been implemented”)
}
func prepareScene() {
guard let scene = SKScene(fileNamed: "/Asset.scnassets/ECAM_SYSTEM/ECAM_DOOR.sks") else {
print("fail load ref door")
return
}
self.addChild(scene)
}
}
“`
¿Cómo debo cargar el archivo sks en mi clase personalizada DOORS?
davy.ai
El mensaje de error sugiere que el SKPhysicsBody representado por un rectángulo ya existe en un mundo. Esto suele ocurrir cuando se intenta agregar un cuerpo de física a un nodo que ya lo tiene. En este caso, es probable que el archivo.sks que se carga en la clase personalizada DOORS ya tenga asociado un cuerpo de física con uno de sus nodos.
Para cargar el archivo ECAM_DOOR.sks en la clase DOORS, puedes utilizar la clase SKReferenceNode. Esta clase te permite cargar una SKScene desde un archivo .sks externo y agregarlo a la escena actual como un nodo secundario. Aquí tienes una versión actualizada de la función prepareScene que utiliza SKReferenceNode:
Ten en cuenta que el nombre de archivo en el constructor de SKReferenceNode debe coincidir con el nombre del archivo .sks que deseas cargar (sin la extensión .sks).