Drone.java

Codificar esto fue divertido y sorprendente la diferencia y ventaja que hace tener dos drones ayudando.

La clase Player.java solo maneja diferentes tipos de naves y cada nave debe manejar los drones a su manera. El objeto Drone.java se inicia en la clase Player.java.

public final static int TOTAL_DRONES = 2;
private final Array<Drone> drones = new Array<>(false, TOTAL_DRONES);

También se encarga de dibujar los drones junto con la nave que este activa pero actualizar o manejar cada drone le toca a cada nave individual.

  @Override
  public void draw(Batch batch, float parentAlpha) {
    activeShip.draw(batch);
    for (Drone drone : drones) drone.draw(batch);
    }

Cada nave recibe los drones en su constructor y es responsable de manejarlos.

orbitingShip = new OrbitingShip(projectilePool, drones);
travelingShip = new TravelingShip(this, gameMap, drones);

OrbitingShip.java

 private static final float DRONE_RADIUS = 30;
 private static final float DRONE_ANGLE = .04f;
    private void dronesAct(float delta) {
      float currentDroneAngle = DRONE_ANGLE;
      for (int i = 0; i < drones.size; i++) {
        Drone drone = drones.get(i);
        drone.r = r;
        drone.destiny.set(
          (radius - radiusFlux - DRONE_RADIUS) * MathUtils.cos(currentAngle + currentDroneAngle),
          (radius - radiusFlux - DRONE_RADIUS) * MathUtils.sin(currentAngle + currentDroneAngle));
        currentDroneAngle = -DRONE_ANGLE;
        drone.act(delta);
      }
    }

Este código solo funciona por el límite de 2 drones. La variable currentDroneAngle empieza en 0.04f ángulos radianes para el primer drone y en la línea 105 lo cambia a negativo (-0.04f) para acomodarlos de manera paralela.

TravelingShip.java

    float offset = -30;

    for (int i = 0; i < drones.size; i++) {
      float droneX = getCenterX() + tmpB.x * offset;
      float droneY = getCenterY() + tmpB.y * offset;
      Drone drone = drones.get(i);
      drone.destiny.set(droneX, droneY);
      drone.r = r;
      drone.act(delta);
    }

Esta nave acomoda cada drone en columna adelante mientras navega. El movimiento no es instantáneo y detecta cuando está llegando a su destino para regresar los drones a la posición lista para OrbitingShip.

Y así 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