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 36 suscriptores

Deja una respuesta

Anuncios


Consola en pantalla 

Algo que siempre he querido tener es la consola visual en pantalla. Lo encuentro útil porque puedo ver el evento directo sin tener que desviar la mirada hacia la consola.

Continua Leyendo…
Anuncios