我正在和libgdx一起玩,以制作另一个物理游戏:),我发现了一些奇怪的东西。即我使用SpriteBatch渲染图像,同时使用Box2DDebugRenderer进行调试。

但是当物理作用时,它们似乎放错了位置。我写:

public class Canon implements ApplicationListener {
    private OrthographicCamera camera;
private Box2DDebugRenderer debugRenderer;

    /...
public void create() {
    camera = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT);
    world = new World(new Vector2(0f, -9.8f), true);
        camera.position.set(CAMERA_WIDTH/2, CAMERA_HEIGHT/2, 0f);
        camera.update();
    debugRenderer = new Box2DDebugRenderer();
    spriteBatch = new SpriteBatch();
        //Create a canon. A rectangle :)
        bd = new BodyDef();
    fd = new FixtureDef(); fd.density = 1;
    PolygonShape ps = new PolygonShape();

    // Cannon
    bd.type = BodyDef.BodyType.StaticBody;
    bd.position.set(new Vector2(8, 5));
    ps.setAsBox(5f, 1f);
    cannonBody = world.createBody(bd);
    fd.shape = ps;
    cannonBody.createFixture(fd);
    }

@Override
public void render() {
    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    debugRenderer.render(world, camera.combined);
    world.step(BOX_STEP, BOX_VELOCITY_ITERATIONS, BOX_POSITION_ITERATIONS);
        spriteBatch.begin();
        Sprite s = (Sprite)targetBody1.getUserData();
        spriteBatch.draw(s.getTexture(),
            (targetBody1.getPosition().x - bodyWidth/2)*ppuX,            (targetBody1.getPosition().y - bodyheight/2)*ppuY,
            0f, 0f, bodyWidth*ppuX, bodyheight*ppuY, 1f, 1f, radToGrad*targetBody1.getAngle(), 0, 0, s.getTexture().getWidth(), s.getTexture().getHeight(), false, false);
    spriteBatch.end();

}
}




这是以后的样子

有任何想法吗?

谢谢!

最佳答案

我找到了。这是由于OpenGL中的旋转是围绕左下角进行的,而Box2D中的旋转是围绕重心的身体进行的。
围绕质心中心体旋转纹理可提供正确的物理/纹理行为。

09-30 19:03