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.

Las colisiones se detectan varias veces aunque solo sea una colisión individual.

func didBegin(_ contact: SKPhysicsContact) {
// Cada contacto tiene dos cuerpos, pero no sabemos cuáles son los dos cuerpos
// Primero encontraremos el cuerpo del jugador, y luego usaremos el otro cuerpo para determinar el tipo de contacto
let otherBody: SKPhysicsBody
// Combinamos las dos categorías de física del jugador en una mascarilla utilizando el operador OR a nivel de bits
let playerMask = PhysicsCategory.player.rawValue | PhysicsCategory.damagedPlayer.rawValue
// Usamos el operador AND a nivel de bits para encontrar el pingüino.
// Esto devuelve un número positivo si la categoría de cuerpo A es la misma que la del jugador o el jugador dañado
if contact.bodyA.categoryBitMask & playerMask > 0 {
// El cuerpo A es el jugador, así que probamos el cuerpo B
otherBody = contact.bodyB
}
else {
// El cuerpo B es el jugador, así que probamos el cuerpo A
otherBody = contact.bodyA
}

// Determinar el tipo de contacto
switch otherBody.categoryBitMask {
case PhysicsCategory.ground.rawValue:
    print("tocó el suelo")
case PhysicsCategory.enemy.rawValue:
    print("chocó con un enemigo, recibe daño")
case PhysicsCategory.coin.rawValue:
    print("recogió una moneda, más riqueza")
case PhysicsCategory.powerup.rawValue:
    print("obtuvo un power up")
default:
    print("Contacto sin lógica de juego")
}

}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de solucionar este problema es establecer la propiedad contactTestBitMask de cada cuerpo físico en tu escena. Esta propiedad determina qué categorías de cuerpos físicos puede colisionar y generar notificaciones de contacto.

    Asegúrate de que la propiedad contactTestBitMask del cuerpo físico de tu jugador esté configurada solo para las categorías de objetos con las que deseas que el jugador colisione. Esto evitará que se detecten múltiples contactos y colisiones.

    Además, asegúrate de que tu física del juego esté configurada correctamente y que no haya errores en tu código de detección de colisiones. Verifica que las máscaras de bits de categoría estén configuradas correctamente y que los cuerpos físicos no se superpongan ni atraviesen entre sí.

    Si el problema persiste, es posible que necesites ajustar la configuración de la simulación física, como la gravedad y la fricción, para crear una simulación más estable y precisa.

Comments are closed.