aktivieren anti-Realisie- rung in der Konfiguration:
Für Desktop:
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
config.samples = 2;
new LwjglApplication(new MyGdxGame(Helper.arrayList(arg)), config);
Für Android:
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
config.numSamples = 2;
initialize(new MyGdxGame(null), config);
Oder Sie könnten eine weiße pixmap von erstellen 1x1 und benutze es um ein spr ite und die Grenze ziehen, dass Sprite verwenden, ich persönlich bevorzugen diese Methode istead von ShapeRenderer (beachten Sie, dass es keine Rotation in dieser Methode):
/**
* draws a line on the given axis between given points
*
* @param batch spriteBatch
* @param axis axis of the line, vertical or horizontal
* @param x x position of the start of the line
* @param y y position of the start of the line
* @param widthHeight width or height of the line according to the axis
* @param thickness thickness of the line
* @param color color of the line, if the color is null, color will not be changed.
*/
public static void line(SpriteBatch batch, Axis axis, float x, float y, float widthHeight, float thickness, Color color, float alpha) {
if (color != null) sprite.setColor(color);
sprite.setAlpha(alpha);
if (axis == Axis.vertical) {
sprite.setSize(thickness, widthHeight);
} else if (axis == Axis.horizontal) {
sprite.setSize(widthHeight, 1);
}
sprite.setPosition(x,y);
sprite.draw(batch);
sprite.setAlpha(1);
}
Mit einigen Änderungen an der bisherigen Methode, können Sie kommen Mit dieser Methode zeichnen Sie eine Linie mit Rotation.
public static void rotationLine(SpriteBatch batch, float x1, float y1, float x2, float y2, float thickness, Color color, float alpha) {
// set color and alpha
if (color != null) sprite.setColor(color);
sprite.setAlpha(alpha);
// set origin and rotation
sprite.setOrigin(0,0);
sprite.setRotation(getDegree(x2,y2, x1, y1));
// set position and dimension
sprite.setSize(distance(x1,y1,x2,y2),thickness);
sprite.setPosition(x1, y1);
// draw
sprite.draw(batch);
// reset rotation
sprite.rotate(0);
}
public static float getDegree(float x, float y, float originX, float originY) {
float angle = (float) Math.toDegrees(Math.atan2(y - originY, x - originX));
while (angle < 0 || angle > 360)
if (angle < 0) angle += 360;
else if (angle > 360) angle -= 360;
return angle;
}
public static float distance(float x, float y, float x2, float y2) {
return (float) Math.sqrt(Math.pow((x2 - x), 2) + Math.pow((y2 - y), 2));
}
Sind Sie runnig dies auf Android-Gerät oder Desktop? –
Ich führe dies in Android-Geräten. –
'GL_LINE_SMOOTH' ist veraltet (von OpenGL ES 1.0, das LibGDX nicht mehr unterstützt). Sie sollten Multisampling aktivieren, indem Sie 'numSamples' in der ApplicationConfiguration setzen, die Sie von der Launcher-Klasse an Ihr Spiel übergeben. Wenn das nicht funktioniert, testen Sie möglicherweise auf einer GPU, die es nicht unterstützt. Es ist auch möglich, glatte Linien ohne Anti-Aliasing zu erhalten, indem Sie lange, dünne Rechteck-Sprites zeichnen, die an den Seiten etwas Polsterung aufweisen. – Tenfour04