2016-10-22 19 views
1

シェイプレンダラーでポリゴンを使用していますが、問題は頂点をいつでも追加できなければならないということです。基本的に頂点は私によっては設定されず、ユーザーによって設定されます。私がしたことは、ユーザーがポイントを追加するたびに、それらをarrayListに追加することです。Libgdxで一連の接続線を描くには?

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も使用していますが、これは衝突する必要はありません。これはユーザーの視覚にとってのものです。 enter image description here

答えて

1

私が個人的に行う方法は、LinkedListVector2オブジェクトを持たせることです。 Vector2オブジェクトには2つの浮動小数点数が格納されるため、クリックするたびに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 
} 

どのように線を描くか、ポイントを接続する方法はあなた次第です。

もう1つは、クリックされた2つの最新のポイントを保持し、他のものを遠ざけることです。これは、ポイントの代わりにラインを格納することを意味します。

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

など

それは奇妙な方法ですが、私はそれが動作すると思います。

+0

問題は、shapeRenderer.polygon(float []);です。私は浮動小数点数の配列でVector2ではありません、ありがとうbtw –

+0

私はLibGDXコードをチェックしました。これは正しい答えだと思います...編集を確認してください – Eames

+0

私はそれも試みましたが、ユーザーが追加すると、floatの配列を初期化することはできません。浮動小数点v =新しいfloat [?]。 –

関連する問題