java - regla - dibujos con lineas rectas faciles
¿Manera fácil de dibujar una línea punteada recta en libgdx? (2)
Me gustaría dibujar una línea punteada recta en libgdx para Android entre puntos de la pantalla.
Actualmente tengo el siguiente código para dibujar la línea sin puntos, usando un ShapeRenderer
:
shapeRenderer.begin(ShapeType.Line);
//draws normal line, would prefer it dotted...............
shapeRenderer.line(touchPos.x, touchPos.y, someSprite.getX(), someSprite().getY());
shapeRenderer.end();
He visto otra pregunta sobre líneas punteadas , pero es un poco exagerada para mí, ya que no la necesito curva, etc. Solo necesito una línea punteada recta , como
.................................................. .............................................
¿Estaba pensando en tener un bucle que simplemente calcula las posiciones de los puntos en la línea y simplemente dibuja puntos allí? pero es realmente necesario, ¿alguien sabe de una manera más simple?
Actualmente estoy usando este método para dibujar las líneas punteadas :
/**
* Draws a dotted line between to points (x1,y1) and (x2,y2).
* @param shapeRenderer
* @param dotDist (distance between dots)
* @param x1
* @param y1
* @param x2
* @param y2
*/
private void drawDottedLine(ShapeRenderer shapeRenderer, int dotDist, float x1, float y1, float x2, float y2) {
shapeRenderer.begin(ShapeType.Point);
Vector2 vec2 = new Vector2(x2, y2).sub(new Vector2(x1, y1));
float length = vec2.len();
for(int i = 0; i < length; i += dotDist) {
vec2.clamp(length - i, length - i);
shapeRenderer.point(x1 + vec2.x, y1 + vec2.y, 0);
}
shapeRenderer.end();
}
Así que, básicamente, calculé el vector de la línea para dibujar y bucle a través de él para dibujar los puntos en función de la distancia de puntos deseada. Una distancia de 10 se veía bastante bien en mi prueba:
drawDottedLine(shapeRenderer, 10, x1, y1, x2, y2);
Esto funciona bastante bien para mí. Si tienes una forma más bonita de dibujar líneas de puntos, házmelo saber.
Podrías dibujar una serie de puntos, que a su vez formarán una línea de puntos. Y crea un ciclo for que dibuja una serie de puntos hasta el final. El código se vería así:
shapeRenderer.begin(ShapeType.Point);
for (float i = touchPos.x; i < someSprite.getX(); i += (someSprite.getY() / touchPos.y))
{
for (float j = touchPos.y; j < someSprite.getY(); j += (someSprite.getX() / touchPos.x))
{
// floats used because the increment might be decimal places.
shapeRenderer.point(i, j, 0);
}
}
shapeRenderer.end();
No sé si esto funcionaría para usted, pero puede intentarlo y editar los valores de incremento para i
y j
según su deseo.
En general, me temo que no hay una función predefinida para dibujar líneas punteadas en libgdx.