Box2d libgdx, немного запутался насчет пикселей и метров

Итак, я понимаю концепцию. Идея заключается в том, что box2d более или менее работает в метрах, поэтому вам нужно выполнить преобразование из пикселей в него. Имеет смысл. Я следовал учебник / введение в box2dВот, В нем упоминается, что нужно выполнить преобразование, и приведены некоторые примеры сумм для использования. Теперь этовсе хорошо, но я нахожу, когда ям, используя такие методы, окно отладчика неКажется, они делают то, что должны. Однако столкновение работает, как и ожидалось.

В моем классе GameScreen, здесьКак я инициализирую землю:

ground = new BodyDef();
// set the position half way up the ground
ground.position.set(0,16 * GameScreen.WORLD_TO_BOX);
groundBody = world.createBody(ground);
groundShape = new PolygonShape();
// make the height 16px so it doubles to 32
groundShape.setAsBox(Gdx.graphics.getWidth() * GameScreen.WORLD_TO_BOX, 16.0f * GameScreen.WORLD_TO_BOX);
groundBody.createFixture(groundShape, 0.0f);

Мой метод рендеринга на этом экране выглядит примерно так:

public void render(float delta) {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    camera.update();
    stateTime += Gdx.graphics.getDeltaTime();

    batch.begin();
    batch.draw(background, 0, Gdx.graphics.getHeight() - 512, 512, 512);
    batch.draw(trailingBackground, 512, Gdx.graphics.getHeight() - 512);
    int heightToCover = Gdx.graphics.getHeight() - 512;
    int widthToCover = Gdx.graphics.getWidth();
    for(int w = 0; w < widthToCover; w += 32) {
        for(int h = 0; h < heightToCover; h += 32) {
            batch.draw(lightBackgroundTile, w, h, 32, 32);
        }
    }
    player.update();
    player.render(stateTime, batch);
    batch.end();
    levels.get(currentLevel).render(camera);

    // physics updates
    world.step(1/60f, 6, 2);
    debugRenderer.render(world, camera.combined);
}

Вот's конструктор класса player, так что вы можете видеть, как я настраиваю его объекты box2d столкновения. Я также вставил метод обновления, который вызывается в цикле рендеринга выше, чтобы отрегулировать положение спрайтов.

public Player(int x, int y, World world) {
    super();
    playerTexture = new Texture(Gdx.files.internal("assets/hero.png"));
    init(x, y, 128, 128, playerTexture, false, world);

    bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.position.set(x * GameScreen.WORLD_TO_BOX, y * GameScreen.WORLD_TO_BOX);
    body = getWorld().createBody(bodyDef);
    collisionBox = new PolygonShape();
    collisionBox.setAsBox(32 * GameScreen.WORLD_TO_BOX, 64 * GameScreen.WORLD_TO_BOX, new Vector2(64 * GameScreen.WORLD_TO_BOX, 64 * GameScreen.WORLD_TO_BOX), 0.0f);

    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = collisionBox;
    fixtureDef.density = 10f; 
    fixtureDef.friction = 0.4f;
    fixtureDef.restitution = 0f;

    body.createFixture(fixtureDef);
    collisionBox.dispose();

    addFrame(0, 0, 128, 128);
}

public void update() {
    this.setX((int) ((body.getPosition().x) * GameScreen.BOX_TO_WORLD));
    this.setY((int) ((body.getPosition().y) * GameScreen.BOX_TO_WORLD));
}

Теперь, когда я удаляю умножение этих статических чисел в различных вычислениях, размерах и т. Д., Столкновение остается правильным, и появляется окно отладчика. Однако передача необработанных пикселей в box2d кажется неправильной. Есть ли что-то, что яздесь не хватает, почему ящики отладки непокажи как есть?

Ответы на вопрос(1)

Ваш ответ на вопрос