精灵没有附加在libgdx中的正文

时间:2016-04-17 06:32:57

标签: libgdx sprite box2d

我希望精灵附加一个多边形形状体。当我运行代码时,sprite和body都会显示,但它们没有相互链接。我查看了所有堆栈溢出问题,但没有任何帮助。    我在一个类中创建它,我从主类实例化它。 这是我的代码,

public SpriteButtons(PlayScreen screen) {

    this.world = screen.getWorld();
    batch = new SpriteBatch();
    region = new TextureRegion(screen.getAtlas().findRegion("fireball"), 0, 0, 16, 16);
    sprite = new Sprite(region);
    this.gamecame = new OrthographicCamera();
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.StaticBody;

    bodyDef.position.set(0, 0);

    body = world.createBody(bodyDef);

    PolygonShape shape = new PolygonShape();

    shape.setAsBox(0.2f, 0.2f);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = shape;
    fixtureDef.density = 1f;
    sprite.setSize(25, 25);
    Fixture fixture = body.createFixture(fixtureDef);

}

public OrthographicCamera getGamecame() {
    return gamecame;
}

public void render(float dt) {
    sprite.setPosition(body.getPosition().x - sprite.getWidth()/2f,
            body.getPosition().y - sprite.getHeight()/2f );
    Gdx.app.log("" + body.getPosition().x, "");
    batch.begin();
    sprite.draw(batch);
    setRegion(region);
    batch.end();
}

我的输出如下,

output

badlogic sprite没有附加多边形体,我从主类实例化这个类,我将从主类render方法调用这个类render方法。对不起,如果问题似乎很愚蠢。我不知道我在哪里错过了这个。请帮忙..!!在此先感谢.. !!

2 个答案:

答案 0 :(得分:0)

你必须根据render方法中的身体位置更新精灵的位置 - 如果你没有这样做,精灵怎么知道它附着在身体上?

请注意,当libgdx'es精灵的起源位于它左下角时,box2d身体的原点位于身体的中心。然后你需要减去身体位置的一半宽度和高度。

所以这就是你要做的事情:

    //render()
    sprite.setPosition(body.getPosition().x - sprite.getWidth()/2f,
                       body.getPosition().y - sprite.getHeight()/2f );

    ...
    sprite.draw(batch);
    ...

答案 1 :(得分:0)

尝试这样做 batch.draw(sprite, sprite.getX(), sprite.getY());并在上面改变身体的初始位置,使其下降,你可以通过初始化世界来检查world = new World(new Vector2(0, -98f), true);