0

ゲームには、Aurélien Ribon による LibGDX Project Setup を使用しました。次の方法でカメラを作成します。

public void create() {      
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();
    camera = new OrthographicCamera(1, h/w);

水平軸が -0.5 から 0.5 まで、垂直軸が -0.5*screenHeight から 0.5*screenHeight までの範囲であるため、スプライトの配置が簡単になります。

ただし、Box2d でいくつかの問題が発生すると思います。跳ねるボールを作成しようとしています。次のことを行います。

BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.position.set(0, 0); //center of screen
    ballBody = world.createBody(bodyDef);
    dynamicCircle = new CircleShape();
    dynamicCircle.setRadius(0.02f);  // really small body size
    ballFixture = new FixtureDef();
    ballFixture.shape = dynamicCircle;
    ballFixture.density = 0.5f;
    ballFixture.restitution = 0.9f;
    ballBody.createFixture(ballFixture);

画面の下部近くに地面の静止体もあります。問題は、ボールが数回バウンドし、最後に (バウンドが非常に低く頻繁に行われる必要がある場合)、着地するだけで動かないことです。

これは、私のワールド単位 (横軸の 1 単位) と関係があると思います。現在のワールド設定を維持し、正しい Box2d 物理を取得するにはどうすればよいですか?

4

2 に答える 2

0

これらのサイズは小さすぎて、Box2D がシェイプ間のオーバーラップ、最大速度、およびこの場合はバウンスを引き起こすために必要な最小速度などを計算するときに使用するデフォルト値でうまく機能しません。

すべてのデフォルト (b2Settings.h 内) を変更することもできますが、物理ワールドに使用されるすべての次元を拡大する方がはるかに優れています。理想的には、シーン内で最も一般的なダイナミック ボディを約 1 物理単位のサイズにすることで、すべてを 25 程度スケールアップできます。

これは単に、設定時に Box2D に与えるすべての次元と位置をその係数で乗算し、Box2D が (たとえば GetPosition などから) 与えるすべての次元と位置を同じ係数で割ってから、残りの部分で使用することを意味します。あなたのゲームの。

これにより、ボールの挙動が変化することがわかります。これは、ボールが小さな小石ではなく大きな岩のサイズになったためです。そのため、重力の影響が遅くなり、より浮いているように感じられます。これは、重力を強くすることで対抗できます。

于 2013-10-06T16:22:34.637 に答える
0

クラスでこれらの変数を宣言します

static final float BOX_STEP = 1 / 60f;
static final int BOX_VELOCITY_ITERATIONS = 6;
static final int BOX_POSITION_ITERATIONS = 0;
static final float WORLD_TO_BOX = 0.01f;
static final float BOX_WORLD_TO = 100f;

しかし、私は主な問題は

ballFixture.restitution = 0.9f;

他のより高い価値を回復に入れれば、良い結果が得られると思います...

;

于 2013-10-05T05:59:18.230 に答える