El sistema de colisiones detecta cuando la nave del jugador entra en contacto con un asteroide. Utiliza rectángulos escalados para crear "hitboxes" más precisas y evitar colisiones "injustas".
codeImplementación
func _comprobar_colision():
# Comprobamos si el rect del jugador intersecta con algún asteroide
var jugador_escalado = _escalar_rect(jugador)
for asteroide in asteroides:
var asteroide_escalado = _escalar_rect(asteroide)
if jugador_escalado.intersects(asteroide_escalado):
_game_over()
func _escalar_rect(r: Rect2):
# Hacemos la "hitbox" más pequeña que el sprite
return r.grow((FACTOR_HITBOX - 1.0) * r.size.x / 2)
# Comprobamos si el rect del jugador intersecta con algún asteroide
var jugador_escalado = _escalar_rect(jugador)
for asteroide in asteroides:
var asteroide_escalado = _escalar_rect(asteroide)
if jugador_escalado.intersects(asteroide_escalado):
_game_over()
func _escalar_rect(r: Rect2):
# Hacemos la "hitbox" más pequeña que el sprite
return r.grow((FACTOR_HITBOX - 1.0) * r.size.x / 2)
radarProceso de detección
transform
Escalado
Reduce rectángulos para hitbox precisa
compare_arrows
Comparación
Verifica intersección entre rectángulos
error
Game Over
Activa fin del juego si hay colisión
crop_free
Uso de Rect2.intersects() para detectar superposición de áreas
loop
Iteración sobre todos los asteroides para comprobar colisiones individuales
tuneParámetros de configuración
aspect_ratio
FACTOR_HITBOX = 0.75 - Factor de reducción para las cajas de colisión
fit_screen
La función _escalar_rect() aplica un margen negativo con grow()
calculate
Cálculo del margen: (FACTOR_HITBOX - 1.0) * r.size.x / 2
priority_high
Las hitboxes más pequeñas que los sprites mejoran la experiencia del jugador
speed
Sistema eficiente que solo requiere comparaciones geométricas simples