簡體   English   中英

LibGx Box2D像素到米僅繪制大對象

[英]LibGx Box2D Pixels to Meters only drawing large objects

我試圖了解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);
}

}

在createDynamicBody中,您使用int進行縮放。 這會導致您在除法時失去精度。 簡單地將您的int標尺替換為float標尺,它應該可以工作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM