Cómo eliminar al jugador después del contacto
func didBegin(_ contact: SKPhysicsContact) {
var firstBody: SKPhysicsBody
var secondBody: SKPhysicsBody
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if ((firstBody.categoryBitMask & CollisionTypes.enemy.rawValue != 0) && (secondBody.categoryBitMask & CollisionTypes.bullet.rawValue != 0)) {
if let enemy = firstBody.node as? SKSpriteNode,
let bullet = secondBody.node as? SKSpriteNode {
bulletCollidedWithEnemy(bulletNode: bullet, enemyNode: enemy)
}
}
else if ((firstBody.categoryBitMask & CollisionTypes.enemy.rawValue != 0) && (secondBody.categoryBitMask & CollisionTypes.player.rawValue != 0)) {
if let enemy = firstBody.node as? SKSpriteNode,
let player = secondBody.node as? SKSpriteNode {
enemyCollidedWithPlayer(enemyNode: enemy, playerNode: player)
}
}
}
func bulletCollidedWithEnemy(bulletNode: SKSpriteNode, enemyNode: SKSpriteNode) {
bulletNode.removeFromParent()
enemyNode.removeFromParent()
score += 1
}
func enemyCollidedWithPlayer(enemyNode: SKSpriteNode, playerNode: SKNode) {
enemyNode.removeFromParent()
playerNode.removeFromParent()
self.updateHighestScore(score: self.score)
// @todo: Mejorar el manejo de pausa
pause()
score = 0
}
Mis enemigos y las balas se eliminan después del contacto y actualizan mi puntuación, pero mi jugador no. No sé si esa última parte de código con el jugador está mal o si es algo más.
func bulletCollidedWithEnemy(bulletNode: SKSpriteNode, enemyNode: SKSpriteNode) {
bulletNode.removeFromParent()
enemyNode.removeFromParent()
score += 1
}
func enemyCollidedWithPlayer(enemyNode: SKSpriteNode, playerNode: SKNode) {
enemyNode.removeFromParent()
playerNode.removeFromParent()
self.updateHighestScore(score: self.score)
// @todo: Mejorar el manejo de pausa
pause()
score = 0
}
Se refiere al enemigo y al proyectil, pero tuve que agregar la segunda parte porque necesito al jugador. Está dentro de didBegin
, así que pensé que esta era la única forma en que funcionaría. ¿Lo escribí mal o debo eliminar todo el código de else if
del jugador?
davy.ai
Según el código proporcionado, el nodo del jugador se está eliminando correctamente de la simulación física al chocar con un enemigo. Sin embargo, puede haber un problema en el resto del código que impide que se actualice o se muestre la eliminación del nodo del jugador.
Una posible solución es agregar una llamada para actualizar la puntuación y pausar el juego en la función
enemyCollidedWithPlayer
, similar a lo que se está haciendo en la funciónbulletCollidedWithEnemy
. Además, verificar si la puntuación y el nodo del jugador se están mostrando correctamente en la escena del juego.Si el problema persiste, podría ser necesario revisar el resto de la lógica del juego y el código para encontrar cualquier otro posible problema que pueda estar afectando al nodo del jugador.