2

私はLibgdxとbox2dが初めてです。弧を描く必要がありました。関数を検索したところ、最終的に以下のようになりました

public void drawarc (float centerx, float centery,float radius, float anglefrom, float anglediff, int steps)
{
    EdgeShape ps = new EdgeShape();

    FixtureDef psfd = new FixtureDef();
    psfd.shape = ps;

    BodyDef psbd = new BodyDef();
    psbd.allowSleep = true;
    psbd.awake = true;
    psbd.position.set(centerx, centery);
    psbd.gravityScale = 0;

    Vector2[] vertices = new Vector2[steps];

    for (int i = 0; i < steps; i++) {
        double angle=Math.toRadians(anglefrom+anglediff/steps*i);
        Vector2 sc = new Vector2((float)(radius * Math.cos(angle)), 
                (float)(radius * Math.sin(angle)));
        vertices[i] = sc;
    }

    Body psd = world.createBody(psbd);

    for (int i = 1; i < steps; i++) {
        ps.set(vertices[i-1], vertices[i]);
        psd.createFixture(psfd);
    }
}

正常に動作していますが、正しい方法かどうかはわかりません。それが効率的/正しい方法であるかどうかを確認して教えてください。

ありがとう

4

1 に答える 1

1

box2d の debug render を使用して描画しているようです。うまくいくかもしれませんが、一般的には良い方法ではありません。アーク頂点作成コードを保持できますが、別の方法でレンダリングします。方法をcom.badlogic.gdx.graphics.glutils.ShapeRenderer.polyline調べます。これも最善の解決策ではありませんが、非常に簡単で、必要のない新しい身体を作成しているため、あなたの方法よりもはるかに効率的です。

デバッグドローはあまり高速ではないため、ゲーム レンダリングにはデバッグドローを使用しないでください。適切な方法は、おそらくMeshクラスを使用することです。

于 2013-08-28T13:52:46.793 に答える