0

まず第一に、あなたの時間をどうもありがとう:)

現在、jbox2d の仕組みを理解しようとしていますが、いくつかの問題があります。私が書いたコードは私にとっては理にかなっていますが、まったく理解できなかったことがあるはずです。基本的に現時点でやりたいことは、主人公 (プレイヤーが操作) を壁に衝突させることです。

詳細には入りませんが、Player という動的エンティティ クラスと Wall という静的エンティティ クラスがあります。レベルを処理する Map というクラスもあります。エンティティの座標は、画面内のピクセルで表されます。

これはjbox2dに関する部分です

私が持っているクラス Map で:

// ... other fields
private static final float TIME_STEP = 1.0f / 60.f;
private static final int VELOCITY_ITERATIONS = 6;
private static final int POSITION_ITERATIONS = 3;
private World world;

// constructor
public Map(int startPosX, int startPosY)
{
        // ...other stuffs
    Vec2 gravity = new Vec2(0, -10f);
    world = new World(gravity);
        // ...other stuffs
}

// update method that is called every 30 ms
public void update(int delta)
{
        // ...other stuffs
    world.step(TIME_STEP, VELOCITY_ITERATIONS, POSITION_ITERATIONS);
}

静的エンティティは次のようになります。

private Map map;
private Body body;
private Fixture fixture;
private PolygonShape shape;

public Wall(int x, int y, Map map)
{
    super(x, y);
    this.map = map;
    BodyDef bodyDef = new BodyDef();
    bodyDef.position.set(x, y);
    bodyDef.type = BodyType.STATIC;
    shape = new PolygonShape();
    shape.setAsBox(CELL_HEIGHT, CELL_WIDTH);
    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape = shape;
    body = map.getWorld().createBody(bodyDef);
    fixture = body.createFixture(fixtureDef);
}

そして最後にプレーヤー:

private Map map;
private PolygonShape shape;
private Body body;
private Fixture fixture;

public MovingEntity(float x, float y, Map map)
{
    super.setX(x);
    super.setY(y);
    animation = Animation.IDLE;
    layer = graphics().createImmediateLayer(new EntityRenderer(this));
    layer.setVisible(false);
    graphics().rootLayer().add(layer);

    BodyDef bodyDef = new BodyDef();
    bodyDef.position.set(x, y);
    bodyDef.type = BodyType.DYNAMIC;
    shape = new PolygonShape();
    shape.setAsBox(getFrameSize().height(), getFrameSize().width());
    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.shape = shape;
    body = map.getWorld().createBody(bodyDef);
    fixture = body.createFixture(shape, 2.0f);
}

私は何を間違っていますか?エンティティはまったく衝突しません。また、更新メソッドでプレーヤーの体の現在の位置を出力しようとすると、動かなくても座標が変化します (重力のために下がっているように思いますが、これは私の環境では必要ありません)。ゲーム)。

どうもありがとうございました!

4

1 に答える 1