gpt4 book ai didi

java - 使用 libGDX 以编程方式绘制漂亮的线条

转载 作者:行者123 更新时间:2023-11-30 07:29:26 25 4
gpt4 key购买 nike

在我的 libGDX 项目中,我必须画这样的线: enter image description here

它可能有不同数量的顶点。目前我只是将它作为具有透明背景的纹理添加到舞台上。如果我有很多这样的线条,就会在 map 集中占用相当多的空间。所以我想使用 libGDX 以编程方式绘制这些多边形链。我没有太多时间和意愿编写自己的库来实现这一目标,所以我对一些现有的解决方案感兴趣。两个问题:

  1. 我发现可以使用 ShapeRenderer.rectLine() 绘制一条线。现在如何添加一些阴影、发光、圆角、渐变等使其看起来更好?还是我必须自己实现这一切?
  2. 我想答案是否定的,但仍然有一种巧妙的方法可以沿着一条线乘以一些小纹理吗?谢谢。

最佳答案

对于这种情况,我认为this可能是解决此问题的最佳方法,但请记住,将 OpenGL 与 Stage 结合使用并不是解决该问题的最简单方法...

另一方面,一种更简单但可能不是那么“漂亮”也不是更快的解决方法是使用TextureRegionDrawable,并对线条路径中的每个点进行缩放、旋转和移动。

我写了一个小类,至少作为引用,它需要一些润色,特别是角落。

public class LineDrawer extends Actor {
private Array<Vector2> path;
private float thickness;
private Image image;

public LineDrawer(Array<Vector2> path, float thickness, TextureRegionDrawable drawable) {
this.path = path;
this.thickness = thickness;
this.image = new Image(drawable);
this.image.setOrigin(Align.left);
}

@Override
public void draw(Batch batch, float parentAlpha) {
float dst, angle;
Vector2 pointA, pointB;
for (int i = 0; i < path.size - 1; i++) {
pointA = path.get(i);
pointB = path.get(i + 1);
dst = pointA.dst(pointB);
angle = MathUtils.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180f / MathUtils.PI;

image.setSize(dst, thickness);
image.setPosition(pointA.x, pointA.y, Align.left);
image.setRotation(angle);

image.draw(batch, parentAlpha);
}
}
}

关于java - 使用 libGDX 以编程方式绘制漂亮的线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36361178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com