In einigen Tutorials auf einer kostenpflichtigen Webseite habe ich gelernt, dass man das Spiel wiederholen kann, indem man die gleiche Szene noch einmal präsentiert, aber ich bin nicht mehr sicher was ich mache falsch. Wenn ich mich richtig erinnere, verwendet das Tutorial so etwas wie dieses (in GameScene
Klasse):Präsentiere die selbe `GameScene` wieder
func newGame() {
let newScene = GameScene()
let transition = SKTransition.fadeWithColor(SKColor.blackColor(), duration: 0.5)
view?.presentScene(newScene, transition: transition)
view?.presentScene(newScene, transition: transition)
}
GameViewController.swift
:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if let skView = self.view as? SKView {
if skView.scene == nil { //if the scene hasn't been created yet
let aspectRatio = skView.bounds.size.height/skView.bounds.size.width
let scene = GameScene(size: CGSize(width: 320, height: 320 * aspectRatio))
//skView.showsFPS = true
//skView.showsNodeCount = true
//skView.showsPhysics = true
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
}
Das Problem ist, das gibt mir die folgende Fehlermeldung:
libc++abi.dylib: terminating with uncaught exception of type NSException
Wenn ich einige Haltepunkte hinzufüge, scheint das Problem mit meinem GameScene
zu sein. Das ist ersten paar Zeilen davon:
class GameScene: SKScene, SKPhysicsContactDelegate {
var player: Player!
var world: SKNode!
Die erste und die zweite Linie verursacht einen schwerwiegenden Fehler (glaube ich), aber ich bin nicht sicher, warum. Soll ich alle Kinder aus der Szene entfernen, bevor ich dieselbe Szene noch einmal vorstelle? Mit diesem Tutorial haben wir nur die gleiche Szene in ein paar Zeilen dargestellt und es hat funktioniert.
UPDATE:
class GameScene: SKScene, SKPhysicsContactDelegate {
var player: Player!
var world: SKNode!
override func didMoveToView(view: SKView) {
self.physicsWorld.contactDelegate = self
player = Player(position: CGPointMake(size.width*0.5, size.height*0.4))
world.addChild(player)
}
}
Da die GameScene
Klasse ist ziemlich lang, ich habe gerade den Teil hinzugefügt, die ich denke, problematisch ist, aber nicht wissen, warum oder was soll ich ändern. diese
Es sieht aus wie die 'GameScene' Klasse wird unter der Annahme, dass 'player' und' world' werden ausgefüllt. Kannst du die komplette 'GameScene'-Klasse zeigen? –
Ich habe einen Teil davon hinzugefügt, ich hoffe es ist genug, weil die ganze Klasse lang ist. Wenn es nicht genug ist, kann ich zusätzliche Methoden hinzufügen, aber ich denke, dass dieser Teil am relevantesten ist. – Larisa
Neue GameScene bei jedem neuen Spiel scheint widersprüchlich mit "die gleiche Szene wieder präsentieren". Beim Erstellen einer zweiten Instanz von GameScene kann etwas an der Logik falsch sein? Schwer zu sagen, ohne mehr Code. Versuchen Sie, ein "dummes" GameScene aufzubauen und testen Sie, ob das Problem in GameScene liegt ... –