Muelle Espacial

Usando coordenadas polares para el movimiento y formación de los enemigos.

Continuando con el concepto de imitar clásicos como «Galaga» y «Space Invaders», codifiqué un muelle espacial que permite el movimiento de enemigos en formación de arco concéntrico.

Empiezo creando un arreglo de dos dimensiones limitado a 81 espacios. La clase Berth() representa una coordenada polar y una variable booleana que indica si ese espacio está ocupado.

public final int rows = 9;
public final int cols = 9;
public final Berth[][] berth = new Berth[rows][cols];

Ahora solo tengo que mantener y actualizar una sola coordenada polar representada por un ángulo y un radio en la que todas las demás se derivan.

private float angle = MathUtils.random(MathUtils.PI2);
private float radius = 600;

Inicio el ángulo al azar usando la función de MathUtils.random() de LibGDX y 600 es el radio mínimo. Dentro del método act(float delta) actualizo esas dos variables que representan la coordenada polar principal.

 angle += speed * delta;
 angle %= MathUtils.PI2;
 if (angle < 0) angle += MathUtils.PI2;
  1. Añade al ángulo para moverlo.
  2. Normaliza dentro del rango PI2.
  3. Asegura que no entre en ángulos negativos.

Esto es altamente eficiente y es la forma estándar e idiomática de manejar la rotación continua y normalizada en bucles de juegos en tiempo real.

Basando en ese ángulo y radio, calculo las 81 coordenadas.

float angleFlux = angle;
float radiusFlux = radius;
float angleSpaceFlux = spacing / radius;

for (int r = 0; r < rows; r++) {
  for (int c = 0; c < cols; c++) {
    Berth thisBerth = berth[r][c];
    thisBerth.angle = angleFlux;
    thisBerth.radius = radiusFlux;
    radiusFlux += spacing;
  }
  radiusFlux = radius;
  angleFlux += angleSpaceFlux;
}

Las variables con el sufijo «Flux» (angleFlux, radiusFlux, angleSpaceFlux) son variables de iterador utilizadas para calcular la posición de cada objeto.

Con este código, calculo y asigno coordenadas angulares y radiales a una cuadrícula en un patrón de arco concéntrico.

Y asi se ve:

Únete a otros 35 suscriptores

Deja una respuesta

Anuncios


Anuncios