Como planeo utilizar curvas Bézier para el movimiento de enemigos, aprovecho y empiezo a codificarlo en el menú. Primero tengo que definir una clase para representar un punto Bézier “BezierPoint.java”.
private final Vector2 point;
private final Vector2 handle;
private BezierPoint linkPoint;
public BezierPoint() {
point = new Vector2();
handle = new Vector2();
linkPoint = null;
}
Cada punto Bézier tiene un vector de coordenada en pantalla (point), otro vector que representa la manecilla que afecta la curva (handle) y una referencia a otro punto Bézier que sería el próximo segmento (linkPoint).
También añadí estos métodos básicos:
public Vector2 getPoint()
public Vector2 getHandle()
public void setPoint(float x, float y)
public void setHandle(float x, float y)
public void setLinkPoint(BezierPoint bezierPoint)
En vez de calcular posiciones cada ciclo, voy a almacenar los resultados de la curva en memoria para mejorar el rendimiento. Para eso, necesito una clase que guarde cada punto (TrailMarker.java).
public class TrailMarker implements Pool.Poolable{
public float x;
public float y;
public float a;
public TrailMarker() {
reset();
}
public void set(float x, float y, float a) {
this.x = x;
this.y = y;
this.a = a;
}
@Override
public void reset() {
this.x = 0;
this.y = 0;
this.a = 0;
}
}
Y por último, codifico una clase para mi implementación de la curva Bézier (BezierPath.java) que incluye arreglos de “TrailMarker”, “BezierPoint” y una instancia de la curva Bézier de LibGDX.
private final Bezier<Vector2> bezier;
public final Array<TrailMarker> trails;
private final Array<BezierPoint> bezierPoints;
public BezierPath() {
bezier = new Bezier<>();
trails = new Array<>();
bezierPoints = new Array<>();
}
Los métodos de la clase incluyen:
public void addSegment(float x, float y)
private void generatePath()
public Array<BezierPoint> getPoints()
«AddSegments” es lo que uso para añadir puntos a la curva. “GeneratePath” es cuando genero la curva y guardo cada punto en el arreglo de “TrailMarkers”.
Ahora solo tengo que calcular los puntos en la pantalla donde quiero que comience, navegue y termine la curva para insertarlos en el método “addSegment” de la clase “BezierPath” y luego generarlo para tener un arreglo de puntos por donde mover las imágenes.
Y asi se ve:


Deja una respuesta