Ich versuche, ein Asteroiden Spiel zu machen, und jedes Mal, wenn der Asteroid mit dem Spieler kollidiert die Endszene fein, geschnitten, wenn ich versuche, es neu zu starten wie der Code steckt die Kollisionsfunktion, die aufgerufen die Endszene. Hier ist die KollisionsfunktionSwift SpriteKit presentScene Fehler
func didBeginContact(contact: SKPhysicsContact) {
print("5")
//Creating a variable that holds which two items collide
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
//Creating a switch case statement
//This will run a different case depending on whitch two objects collide
switch(contactMask) {
//If the satellite and the asteroid collide do this
case bitMask.satellite.rawValue | bitMask.asteroid.rawValue:
//removing the satellite
let secondNode = contact.bodyB.node
secondNode?.physicsBody?.allowsRotation = true
let firstNode = contact.bodyA.node
firstNode?.removeFromParent()
//Stopping the mission timer
removeActionForKey("missionDurationTime")
self.removeAllChildren()
print("6")
self.view?.presentScene(EndScene())
print("7")
default:
return
}
}
Und hier ist die Funktion, die von meinem Ende Szene zu meiner Spielszene geht zurück
func Restart(){
print("hello")
RestartBtn.removeFromSuperview()
speach.removeFromSuperview()
score.removeFromSuperview()
gameOver.removeFromSuperview()
self.view?.presentScene(GameScene())
}
Nachdem ich die Restart-Taste traf alle Etikett in der EndScene geht weg wie sie sollten, aber dann ist der Bildschirm leer und die Konsole druckt nur 5 Zu viele Male zu zählen, bis die Etiketten in der Endszene zurückkommen. Ich bin sehr verwirrt und weit über meinem Kopf. Jede Hilfe wird sehr geschätzt!
UPDATE:
ich den Code in meiner Neustart-Taste, um diesen Nun sollte die Spielszene Lasten und alles ist wie es
print("hello")
RestartBtn.removeFromSuperview()
speach.removeFromSuperview()
score.removeFromSuperview()
gameOver.removeFromSuperview()
let scene = GameScene(size: self.view!.bounds.size)
scene.backgroundColor = SKColor(red: 1, green: 1, blue: 1, alpha: 1)
scene.scaleMode = .AspectFill
scene.backgroundColor = UIColor.whiteColor()
let transition = SKTransition.pushWithDirection(SKTransitionDirection.Left, duration:0.5)
self.scene?.view?.presentScene(scene, transition: transition)
geändert werden, mit Ausnahme der Tatsache, dass alles fünfmal größer . Dies ist, wie es aussehen soll: What it should look like
Und das ist, wie es What it does look like
Wie werden Sie rufen Ihre erste Szene, wenn die App startet (Code in gameView Controller) ?. Können Sie diesen Code bitte in Ihre Frage einfügen? In Ihrem aktuellen Neustart-Code ist es wichtig, dass Sie das GameScene mit den View-Grenzen als dessen Größe initialisieren. Die darunter liegenden Zeilen für den Skalenmodus Zeile 2 funktionieren nicht, wenn Sie Ihre Szene nicht mehr skalieren. Ich nehme an, dass Sie Ihre Szene anders skalieren, wenn Sie Ihr Spiel laden und wenn Sie es neu starten und es daher anders aussieht. – crashoverride777
Ich verwende nur den Code im Game View Controller, den Xcode Ihnen gibt, wenn das Sinn macht. Ich kann den genauen Code gerade nicht posten, da ich gerade nicht bei meinem Mac bin. –
Ich habe eine Antwort hinzugefügt. Lass mich wissen wie es geht. – crashoverride777