簡體   English   中英

libgdx box2d主體與精靈重疊

[英]Libgdx box2d body overlaps with sprite

我一直對代碼感到困惑,從不做像素到測量儀表,到現在幾乎有了人體和精靈,我已經取得了很大進步,但是我發現我似乎無法弄清楚哪里我錯了。 在此處輸入圖片說明

從圖像中可以看到,身體偏離了實際的精靈,我預感它可能是起源,因為差異很小,但是我似乎無法弄清楚如何使其一致。

我的創建方法

    public class Physics1 extends ApplicationAdapter implements InputProcessor {
SpriteBatch batch;
Sprite sprite;
Texture img;
World world;
Body body;
Box2DDebugRenderer debugRenderer;
Matrix4 debugMatrix;
OrthographicCamera camera;
Vector2 bodyOrigin;


float torque = 0.0f;
boolean drawSprite = true;

final float PIXELS_TO_METERS = 100f;

final float WORLD_WIDTH =100;
final float WORLD_HEIGHT=100;


@Override
public void create() {

    Assets.instance.init(new AssetManager());
    batch = new SpriteBatch();
    bodyOrigin = new Vector2();

    sprite = new Sprite();
    sprite.setRegion(Assets.instance.tyre.tyre);
    sprite.setSize(12,12);
    sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);




    sprite.setPosition(50-sprite.getWidth()/2,25);

    Gdx.app.log("Physics1", "Sprite positions"+ -sprite.getWidth()/2+ " ,"+ -sprite.getHeight()/2);

    world = new World(new Vector2(0, 0f),true);

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.DynamicBody;
    BodyEditorLoader load = new BodyEditorLoader(Gdx.files.internal("levels/pittstop.json"));

    bodyDef.position.set(sprite.getX()/PIXELS_TO_METERS,sprite.getY()/PIXELS_TO_METERS);


    Gdx.app.log("Physics1", "Body positions calculations"+ sprite.getX() +" "+ sprite.getWidth()/2);

    Gdx.app.log("Physics1", "Body positions"+ bodyDef.position);
    body = world.createBody(bodyDef);

    FixtureDef fixtureDef = new FixtureDef();

    fixtureDef.density = 0.1f;


    fixtureDef.friction = 0.0f;
    fixtureDef.restitution = 0.0f;


    float scale =0.2f;

    load.attachFixture(body, "tyre", fixtureDef, scale);
    Gdx.app.log("Physics1"," Orgin of body" +load.getOrigin("tyre", scale).cpy());
    bodyOrigin = load.getOrigin("tyre", scale).cpy();

    body.setUserData("tyre");


    Gdx.input.setInputProcessor(this);

    debugRenderer = new Box2DDebugRenderer();

    camera = new OrthographicCamera(WORLD_WIDTH,WORLD_HEIGHT);
    Gdx.app.log("Physics1", "camera "+ camera.viewportWidth+" "+camera.viewportHeight);

    camera.position.set(WORLD_WIDTH / 2f, WORLD_HEIGHT / 2f, 0);
    Gdx.app.log("Physics1", "camera "+ camera.viewportWidth+" "+camera.viewportHeight);

}

我的渲染方法

    public void render() {
    camera.update();
    world.step(1f/60f, 6, 2);

    body.applyTorque(torque,true);

    sprite.setPosition((body.getPosition().x * PIXELS_TO_METERS), 
            (body.getPosition().y * PIXELS_TO_METERS))
             ;

    sprite.setRotation((float)Math.toDegrees(body.getAngle()));

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    batch.setProjectionMatrix(camera.combined);

    debugMatrix = batch.getProjectionMatrix().cpy().scale(PIXELS_TO_METERS, 
                  PIXELS_TO_METERS, 0);

    batch.begin();


    if(drawSprite)
        batch.draw(sprite, sprite.getX(), sprite.getY(),bodyOrigin.x,
                   bodyOrigin.y,
            sprite.getWidth(),sprite.getHeight(),sprite.getScaleX(),sprite.
                            getScaleY(),sprite.getRotation());


    batch.end();

    debugRenderer.render(world, debugMatrix);
}

錯誤的警報,在物理學編輯器中發現,您有機會更改要繪制的物體的原點,只需單擊四周,便可以將原點移動到中心,然后就可以了。

在此處輸入圖片說明

暫無
暫無

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

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