Desafío Mina Captora Orbital

El primero de dos desafíos que rompen la monotonía y sigue el patrón del tragamonedas Galaga.

El propósito del desafío es evitar chocar con las minas para obtener el mayor puntaje. Si no logras esquivar alguna mina, simplemente estalla y te resta del total de puntos pero, aunque el jugador es indestructible, sus drones no lo son. Si una mina logra alcanzar un dron pues lo elimina.

Method spawn() de MineChallange.
for (int i = 0; i < total; i++) {

      float randomAngle = MathUtils.random(MathUtils.PI2);
      float radius = MathUtils.random(minRadius, maxRadius);
      float originX = radius * MathUtils.cos(randomAngle);
      float originY = radius * MathUtils.sin(randomAngle);

      BaseAnimatedActor mine = minePool.obtain();

      mine.setOriginBasedPosition(originX, originY);

      mine.addAction(Actions.delay(delay, Actions.parallel(
        Actions.rotateBy(720, duration),
        Actions.scaleTo(1, 1, duration),
        Actions.delay(duration, Actions.run(() -> attack(mine))))));

      if (i % waveSize == 0) delay += delayFlux;
      else delay += .5f;
    }

La animación está dividida en dos partes. La primera rota y escala de 0 a 1 la mina en un ángulo orbital al azar. La segunda parte es cuando la mina ataca al jugador (linea 99).

  private void attack(BaseAnimatedActor mine) {

    float duration = .3f;
    float delay = 1.4f;

    mine.addAction(Actions.parallel(
      Actions.moveTo(
        player.getCenterX() - halfMineSize,
        player.getCenterY() - halfMineSize, duration, Interpolation.exp5In),
      Actions.delay(duration + delay, Actions.scaleTo(0, 0, duration)),
      Actions.delay(duration + delay, Actions.rotateBy(90f, duration))
    ));
  }

Es necesario separar el ataque para lanzar la mina a la posición actual del jugador. Si se programa el ataque de antemano, la posición sería inválida.

Y así se ve:

Únete a otros 35 suscriptores

Deja una respuesta

Anuncios


Anuncios