es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  ,

Answer

  1. Avatar for 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ón bulletCollidedWithEnemy. 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.

Comments are closed.