2016-04-01 12 views
1

を使用してプログラム美しいラインを描きます。現在、透明な背景のテクスチャとしてステージに追加しています。そのような線がたくさんある場合、地図上にはかなりのスペースが必要です。ですから、私はこれらの多角形の鎖をプログラムでlibGDXを使って描きたいと思います。私は多くの時間がなく、これを達成するために私自身の図書館を書くつもりなので、私はいくつかの既存のソリューションに興味があります。 2つの質問:私は、このような線を描画する必要があり、私のlibGDXプロジェクトでlibGDX

  1. ShapeRenderer.rectLine()を使用して線を描画できることがわかりました。今、どのようにいくつかの色合い、輝く、丸みを帯びた端、グラデーションなどを追加して見栄えを良くすることができますか?それとも私はこれを自分で実装する必要がありますか?
  2. 答えはノーだと思いますが、それでもラインに沿って小さなテクスチャを掛けるうまい方法がありますか?ありがとう。この場合の
+0

OpenGLでは、テクスチャ座標を0-1の範囲を超えて指定できます。何が起こるかは、テクスチャパラメータラッピングモード(リピートやミラーなど)によって制御されます。私は、質問2に答えていると思う。丸め終わりは、rectLineをレンダリングした後に小さな円を追加することによって達成することができる。 「グロー」、「シェード」、「グラデーション」をどのように使いたいかのイメージを追加できれば、それらのソリューションも提案してみてください。 – Andreas

答えて

1

、私はthisこれを行うための最善の方法かもしれないと思うが、ステージでOpenGLを使用すると、それを解決する最も簡単な方法ではないことに注意して取る...

一方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); 
     } 
    } 
} 
関連する問題