私はこの部分で立ち往生していますが、私はremoveFromParentを試みていますが、それは動作しません。私のゲームでは、敵が3回プレイしたときに敵が3秒間コロイドしてしまうと、敵が数秒間続けて消えてしまい、プレーヤーにダメージを与え続けてしまうという問題があります。ゲーム終了時にスプライトを削除するには?
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)"
}
}
}
あなたは本当に上で動作するために私たちに多くを与えていません。上記の関数はどこから呼び出されていますか?論理的なことは、 'gameOver'変数(おそらくあなたのgameStarted var?)のようなものを持つことでしょう。そして、これが真であるときは、ロジックを実行することをチェックすることなくdidBeginContact関数から戻ります。 –
私の質問に連絡先コードを追加しました –