【问题标题】:How to draw a series of connected lines in Libgdx?如何在 Libgdx 中绘制一系列连接线?
【发布时间】:2016-11-07 13:56:21
【问题描述】:

我在形状渲染器上使用多边形,问题是用户应该能够随时添加顶点,基本上顶点不是我设置的,而是用户设置的。我所做的是每当用户添加一个点时,我将它们添加到一个数组列表中。

ArrayList<Float> v = new ArrayList<Float>();
public void ontouch(screenX, screenY){
      v.add(screenX);
      v.add(screenY)
}

然后当我尝试在 shapeRenderer 上渲染多边形时遇到这个问题

for(int i = 0; i < v.size; i++){
    float[] vertices = new float[v.size()]
    vertices[i - 1] = v.get(i - 1);
    vertices[i] = v.get(i);
}
sr.polygon(v);

但我只是得到错误。

我正在尝试实现这样的目标,如果您知道这样做的不同方式,那将非常有帮助。顺便说一句,我也在使用 box2d,这不需要碰撞,它只是为了用户视觉。

【问题讨论】:

    标签: java libgdx


    【解决方案1】:

    我个人的做法是使用 LinkedListVector2 对象。 Vector2 对象存储两个浮点数,因此每次单击时,您都会获得 x 和 y 坐标并创建一个新的 Vector2 对象。通过将它们存储在 LinkedList 中,您可以随时以正确的顺序检索这些点,以便连接一条线。

    LinkedList<Vector2> v = new LinkedList<Vector2>();
    public void ontouch(screenX, screenY){
          v.add(new Vector2(screenX, screenY)); // add Vector2 into LinkedList
    }
    

    你想如何画线或连接点取决于你。

    另一个是只保留最近点击的两个点,而将其他点扔掉。这意味着存储线而不是点。如果线条是对象,那么您可以这样做:

    Vector2 previousPoint;
    Vector2 currentPoint;
    ArrayList<MyLineClass> lines = new ArrayList<MyLineClass>();
    public void ontouch(screenX, screenY){
          if(previousPoint == null){
              previousPoint = new Vector2(screenX, screenY);
          }else{
              previousPoint = currentPoint;
              currentPoint = new Vector2(screenX, screenY);
              lines.add(new MyLineClass(currentPoint, previousPoint)
          }
    }
    

    我即兴写了这个,但我相信这个例子应该可行。

    编辑:

    好在 LibGDX 是开源的。如果要使用浮点数数组,该方法只需按交替顺序获取 x 和 y 坐标。所以对于每个索引:

    0 = x1

    1 = y1

    2 = x2

    3 = y2

    4 = x3

    5 = y3

    等等

    这是一个奇怪的方法,但我想它有效。

    【讨论】:

    • 问题在于 shapeRenderer.polygon(float[]);我需要一个浮点数组而不是 Vector2,谢谢 btw
    • 我检查了 LibGDX 代码,我相信这是正确的答案...检查编辑
    • 我也试过了,但由于我不知道用户将添加多少点,所以我无法初始化浮点数组,float v = new float[?]。
    • 我明白了,我打算建议你再做一个我的想法,但你已经在问题中尝试过了。你遇到了什么错误?
    猜你喜欢
    • 2018-02-09
    • 2016-12-20
    • 2013-02-03
    • 2016-12-29
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多