2016-03-22 18 views
11

私はlibgdxを使ってゲームを開発しています。シェイプレンダラーを使って滑らかな線を描きたいと思います。滑らかな線を描く

 shaperenderer.begin(ShapeType.Line); 
     shaperenderer.line(fisrstVec2,secondVec2); 
     shaperenderer.end(); 

私はlibgdxブログからMulti Sample anti aliasingを試しました。 私もAnti aliased filed shape in libgdx に行きましたが、残念ながらこれらの行はlibgdxの最新のバージョンではありません。

AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 
    config.numSamples = 2; 
    initialize(new MyGdxGame(null), config); 

それともの白いピックスマップを作成することができます。Androidの場合

LwjglApplicationConfiguration config = new LwjglApplicationConfiguration(); 
    config.samples = 2; 
    new LwjglApplication(new MyGdxGame(Helper.arrayList(arg)), config); 

:デスクトップ用

Gdx.gl.glEnable(GL10.GL_LINE_SMOOTH); 
    Gdx.gl.glEnable(GL10.GL_POINT_SMOOTH); 
+2

これはAndroid搭載端末またはデスクトップで実行していますか? –

+3

私はアンドロイドデバイスでこれを実行しています。 –

+10

'GL_LINE_SMOOTH'は廃止されました(OpenGL ES 1.0から、LibGDXはもはやサポートしていません)。ランチャークラスからゲームに渡すApplicationConfigurationで 'numSamples'を設定することでマルチサンプリングを有効にする必要があります。それが動作しない場合、おそらくあなたはそれをサポートしていないGPUでテストしています。また、アンチエイリアスを起こさずにスムーズな線を得ることも可能です。 – Tenfour04

答えて

1

構成の抗alisingを有効にします1x1を作成し、それを使ってsprを作成するITEとそのスプライトを使って線を引くには、私は個人的にShapeRendererのこのメソッドはisteadを好む(この方法には回転が存在しないことに注意してください):従来の方法にはいくつかの修正を加えた

/** 
* 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); 
} 

は、あなたが出てくることができますこのメソッドを使用すると、回転する線を描くことができます。

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)); 
} 
+0

回転メソッドは、マルチサンプリングを有効にした場合にのみ機能します。 –

+0

@GuilhermeCamposHazanマルチサンプルはデフォルトで有効になっていませんか? – ossobuko

+0

いいえ、オプションです。デフォルトはsamples = 0です。 –