2016-04-17 1 views
0

Я хочу, чтобы спрайт был прикреплен с корпусом формы многоугольника. Когда я запускаю код, как спрайт, так и тело отображаются, но они не связаны друг с другом. Я просмотрел все проблемы с переполнением стека, но ничего не помогло. Я создаю это в классе, и я создаю его из основного класса. Это мой код,Спрайт не прикреплен к телу в libgdx

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 спрайт не привязываясь с полигоном телом и я инстанцированием этого класса от основного класса и I будет вызывать этот метод рендеринга класса из метода рендеринга основного класса. Извините, если вопрос кажется глупым. Я не знаю, где мне это не хватает. Пожалуйста помоги..!! Заранее спасибо..!!

ответ

0

Вы должны обновить положение спрайта в соответствии с положением тела в методе render - если вы не делаете этого, как спрайт может знать, что он прикреплен к телу?

Обратите внимание, что начало корпуса box2d находится в центре тела, когда источник sprite от libgdx'es находится в левом нижнем углу. Затем вам нужно вычесть половину ширины и высоты положения тела.

Так это то, что вы должны сделать:

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

    ... 
    sprite.draw(batch); 
    ... 
+0

no все еще его не прилагается с телом @ m.antkowicz – Anusha

+0

Вы не могли бы предоставить ваш текущий код? –

0

попробовать делать щётка постион этого batch.draw(sprite, sprite.getX(), sprite.getY()); и изменения тела somewher выше, так что она упала, и вы можете проверить под действием силы тяжести инициализации мира, как world = new World(new Vector2(0, -98f), true);