Más o menos el mapa espacial está listo (StarMap.java), pero antes de finalizar las posiciones de planetas, voy a codificar la navegación interplanetaria.
Las estrellas, planetas y móviles (jugador y enemigos) usan coordenadas diferentes. Cada sistema de coordenadas utiliza solo un vector de referencia como base. En el caso de los planetas, le llamo “CHART”.
public static final Vector2 CHART = new Vector2();
La posición de cada planeta se basa en un ángulo y un radio referente al centro (0,0), y así lo calculo.
public Planet(String name, TextureRegion textureRegion, float angle, float orbit) {
x = -(w / 2) + MathUtils.cos(angle) * orbit;
y = -(h / 2) + MathUtils.sin(angle) * orbit;
}
Ahora codifico una gran decepción. Debido a que el código tiene que adaptarse a cualquier orientación o tamaño de pantalla, es necesario que el jugador se mantenga en el centro de las coordenadas (0, 0). Por eso, para navegar entre planetas, el jugador nunca cambia de posición, sino que muevo el vector base (CHART) para simular movimiento interplanetario.
Cuando el jugador escoge un planeta para navegar, calculo una curva Bézier (spline) entre la posición actual del jugador y el planeta de destino, entonces actualizo la posición de (CHART) en la clase StarMap.java.
spline.valueAt(tmp, currentProgress);
starMap.getChart().set(tmp);
Y asi se ve:


Deja una respuesta