La función crear_asteroides() genera asteroides en posiciones aleatorias fuera de la pantalla, que luego se moverán hacia el jugador. La frecuencia de aparición aumenta con la dificultad.
-
add_circle
Generación controlada
Crea asteroides según la frecuencia actual del juego
-
shuffle
Posición aleatoria
Aparecen en los bordes superior o laterales
-
speed
Velocidad variable
Velocidad basada en el nivel de dificultad
lightbulb
Puntos clave
check_circle
Se ejecuta periódicamente según la dificultad
check_circle
Cada asteroide es un diccionario independiente
check_circle
Dirección hacia el jugador con variación aleatoria
Generación de asteroides
blur_circular
func crear_asteroides():
# Obtener dimensiones de pantalla
var pantalla = get_viewport().get_visible_rect().size
# Crear nuevo asteroide
var asteroide = {}
# Determinar borde de aparición (0=arriba, 1=derecha, 2=abajo, 3=izquierda)
var borde = randi() % 4
match borde:
0: # Arriba
asteroide.pos = Vector2(randf() * pantalla.x, -TAM_ASTEROIDE)
1: # Derecha
asteroide.pos = Vector2(pantalla.x, randf() * pantalla.y)
2: # Abajo
asteroide.pos = Vector2(randf() * pantalla.x, pantalla.y)
3: # Izquierda
asteroide.pos = Vector2(-TAM_ASTEROIDE, randf() * pantalla.y)
# Calcular dirección hacia el jugador con variación
var dir_jugador = (jugador.pos - asteroide.pos).normalized()
var angulo_variacion = (randf() - 0.5) * PI/4 # ±22.5°
asteroide.dir = dir_jugador.rotated(angulo_variacion)
# Establecer velocidad según dificultad
asteroide.vel = velocidad_asteroides
# Tamaño y rotación
asteroide.tam = Vector2(TAM_ASTEROIDE, TAM_ASTEROIDE)
asteroide.rot = 0
asteroide.vel_rot = (randf() - 0.5) * 2
# Añadir al array
asteroides.append(asteroide)
# Obtener dimensiones de pantalla
var pantalla = get_viewport().get_visible_rect().size
# Crear nuevo asteroide
var asteroide = {}
# Determinar borde de aparición (0=arriba, 1=derecha, 2=abajo, 3=izquierda)
var borde = randi() % 4
match borde:
0: # Arriba
asteroide.pos = Vector2(randf() * pantalla.x, -TAM_ASTEROIDE)
1: # Derecha
asteroide.pos = Vector2(pantalla.x, randf() * pantalla.y)
2: # Abajo
asteroide.pos = Vector2(randf() * pantalla.x, pantalla.y)
3: # Izquierda
asteroide.pos = Vector2(-TAM_ASTEROIDE, randf() * pantalla.y)
# Calcular dirección hacia el jugador con variación
var dir_jugador = (jugador.pos - asteroide.pos).normalized()
var angulo_variacion = (randf() - 0.5) * PI/4 # ±22.5°
asteroide.dir = dir_jugador.rotated(angulo_variacion)
# Establecer velocidad según dificultad
asteroide.vel = velocidad_asteroides
# Tamaño y rotación
asteroide.tam = Vector2(TAM_ASTEROIDE, TAM_ASTEROIDE)
asteroide.rot = 0
asteroide.vel_rot = (randf() - 0.5) * 2
# Añadir al array
asteroides.append(asteroide)
place
Posición
Vector2(borde_x, borde_y)
explore
Dirección
hacia jugador + variación
speed
Velocidad
velocidad_asteroides
rotate_right
Rotación
vel_rot aleatoria