Ich habe in diesem Teil stecken geblieben, ich habe versucht, FromParent zu entfernen, aber es funktioniert nicht. In meinem Spiel, wenn ein Gegner dreimal mit dem Spieler kollidiert, ist das Problem, dass die Gegner für einige Sekunden weiterkommen und dann verschwinden, aber dem Spieler weiterhin Schaden zufügen.Wie entferne ich ein Sprite, wenn das Spiel vorbei ist?
func didBeginContact(contact: SKPhysicsContact) {
let body1 = contact.bodyA.node as! SKSpriteNode
let body2 = contact.bodyB.node as! SKSpriteNode
if ((body1.name == "circuloPrincipal") && (body2.name == "enemigo")) {
colisionPrincipal(body2)
}else {
((body1.name == "enemigo") && (body2.name == "circuloPrincipal"))
colisionPrincipal(body1)
}
}
func colisionPrincipal(enemigo: SKSpriteNode) {
if hits < 2 && circuloPrincipal.color != enemigo.color{
shakeFrame(scene!)
circuloPrincipal.runAction(SKAction.scaleBy(1.5, duration:0.5))
enemigo.removeFromParent()
let particula = SKEmitterNode(fileNamed: "particulas.sks")
particula?.position = enemigo.position
particula?.hidden = false
particula?.runAction(SKAction.fadeOutWithDuration(0.8))
self.addChild(particula!)
hits += 1
}else if circuloPrincipal.color == enemigo.color {
enemigo.physicsBody?.affectedByGravity = false
enemigo.physicsBody?.dynamic = true
enemigo.removeFromParent()
score += 1
scoreLabel.text = "\(score)"
}else {
shakeFrame(scene!)
gameStarted = false
enemigo.removeFromParent()
enemigoTimer.invalidate()
highscoreLabel.runAction(SKAction.fadeInWithDuration(0.5))
if score > highscore {
let highscoreDefault = NSUserDefaults.standardUserDefaults()
highscore = score
highscoreDefault.setInteger(highscore, forKey: "highscore")
highscoreLabel.text = "Best: \(highscore)"
}
}
}
Sie geben uns nicht wirklich viel zu arbeiten. Woher kommt die obige Funktion? Das logische Ding wäre, etwas wie eine 'gameOver'-Variable zu haben (das ist vielleicht Ihre gameStarted var?). Wenn das wahr ist, dann kehren Sie einfach von der didBeginContact-Funktion zurück, ohne irgendwelche Überprüfungen irgendeiner Logik durchzuführen. –
Ich habe den ded Start Kontaktcode zu meiner Frage hinzugefügt –