单位转换Box2D有奇怪的结果

时间:2015-09-03 19:33:45

标签: libgdx box2d

我正在使用LibGDX并尝试学习box2D,但这个单位转换让我感到困惑,我的想法是:我有一个256x256像素的图像,想要创建一个代表这个图像的体,使用1:32比例,所以每当我想将值传递给box2D比例时,我必须将它除以32或多数除以1/32(它是相同的等式),每次我想从这个世界到像素比例得到的值我必须将它多显示32,但是问题仍然相同:无法获得良好的模拟,我会把我的代码放在这里,看看我是怎么做的(我会把变量也放在这里你只需要ctrl + c和ctrl + v):

    private SpriteBatch batch;
    private ShapeRenderer srender;
    private Texture img;

    private World world;
    private Body bad, bridge;

    private OrthographicCamera cam, cam2;

    private Box2DDebugRenderer render;
@Override
public void create () {
        srender = new ShapeRenderer();
        batch = new SpriteBatch();
        img = new Texture("badlogic.jpg");

        cam = new OrthographicCamera(500f, 500f);
        cam.translate(250f, 250f);
        cam.update();

        //Used to draw the box2D world scaled to the pixels size
        cam2 = new OrthographicCamera(500 * 0.03125f, 500 * 0.03125f);
        cam2.translate(250f * 0.03125f, 250f * 0.03125f);
        cam2.update();

        render = new Box2DDebugRenderer();
        world = new World(new Vector2(0f, -10f), true);

        BodyDef bdef = new BodyDef();
        bdef.type = BodyType.DynamicBody;
        bad = world.createBody(bdef);

        PolygonShape pshape = new PolygonShape();
        pshape.setAsBox(img.getWidth() * 0.03125f, img.getHeight() * 0.03125f);

        FixtureDef fdef = new FixtureDef();
        fdef.shape = pshape;
        bad.createFixture(fdef);

        /*Criando a ponte*/
        bdef.type = BodyType.StaticBody;
        bridge = world.createBody(bdef);

        pshape.setAsBox(500f * 0.03125f, 5f * 0.03125f);
        bridge.createFixture(fdef);

        bad.setTransform(new Vector2(250f * 0.03125f, 500f * 0.03125f) , 0);
        bridge.setTransform(new Vector2(250f * 0.03125f, 0f * 0.03125f), 0);

        batch.setProjectionMatrix(cam.combined);
        srender.setProjectionMatrix(cam.combined);
    }

@Override
public void render () {
    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();
    batch.draw(img, (bad.getPosition().x - img.getWidth()/2 * 0.03125f) * 32, 
                            (bad.getPosition().y - img.getHeight()/2 * 0.03125f) * 32);
            batch.end();

            render.render(world, cam2.combined);

            srender.begin(ShapeRenderer.ShapeType.Filled);
            srender.circle(250f, 500f, 5f);
            srender.circle(250f, 0f, 5f);
            srender.end();

            world.step(1/60f, 6, 2);
}

如果您运行此代码,您将看到创建的框仍然不适合图像大小,图像停止在屏幕中间行走,而它应该只在底部停止,任何人都可以帮助我吗?谢谢你的关注。

Ps:我已经听说过更改视口,但我仍然在尝试学习这些转换,之后我会去寻找视口。

0 个答案:

没有答案