libgx box2d像素到米仅绘制大对象



我试图了解Box2D物理引擎。我在libgx中使用它,然后面临问题。当我从像素转换为仪表时,只绘制了大对象。这样说:

public class GameScreen implements Screen{
static int PPM = 100;
Box2DDebugRenderer debugRenderer;
World w = new World(new Vector2(0,-0.981f),true);
OrthographicCamera cam;
public static Body createDynamicBody(World world, int x, int y, int w, 
    int h, int density, int scale) {
    BodyDef def = new BodyDef();
    def.type = BodyDef.BodyType.DynamicBody;
    def.position.set(x/scale,y/scale);
    Body b = world.createBody(def);
    FixtureDef fdef =new FixtureDef();
    PolygonShape shape = new PolygonShape();
    shape.setAsBox((w/2)/scale,(h/2)/scale);
    fdef.shape = shape;
    b.createFixture(fdef);
    return b;
}
 // initialized when Screen is loaded
 @Override
public void show() {
    cam = new OrthographicCamera();
    font = new BitmapFont();
    debugRenderer = new Box2DDebugRenderer();
    cam.setToOrtho(false,800,480);
    debugRenderer = new Box2DDebugRenderer();
    // this body is not drawn
    Body b = createDynamicBody(w,200,200,150,150,5, PPM);
    // this body is drawn
    Body b2 = createDynamicBody(w,200,200,200,200,5, PPM);
}
@Override
public void render(float delta) {
    Gdx.gl.glClearColor(0.2f,0.1f,0.7f,1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    debugRenderer.render(w,camera.combined.cpy().scale(PPM,PPM,0));
    w.step(1/60f,6,2);
}
}

在您创建的动力体中,您使用的是int for比例。这会导致您在分裂时失去精度。简单地用浮子刻度替换int秤,它应该起作用。

public static Body createDynamicBody(World world, int x, int y, int w, 
                                            int h, int density, float scale)

最新更新