2016-04-17 41 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(); 
} 

私の出力はbadlogicスプライトがポリゴン本体に取り付けたばかりされていないと私はメインクラスから、このクラスをインスタンス化し、I AM、

output

で、私のコードですメインクラスのレンダリングメソッドからこのクラスのレンダリングメソッドを呼び出します。申し訳ありませんが、質問が愚かだと思われる場合。私はこれを逃しているのか分からない。助けてください..!!前もって感謝します..!!

答えて

0

renderメソッドのボディ位置に従ってスプライトの位置を更新する必要があります。スプライトがボディにアタッチされていることをスプライトがどのように知ることができないのですか?

libgdxのスプライトの原点が左端のボトム角にある場合、box2dボディの原点がボディの中心にあることに注意してください。次に、体の位置の幅と高さの半分を引く必要があります。

だから、これはあなたがする持っているものです:

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

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

まだ本体についていない@m.antkowicz – Anusha

+0

あなたは現在のコードを提供してください。 –

0

はこの batch.draw(sprite, sprite.getX(), sprite.getY());をやって試してみて、それが落ちるとあなたがworld = new World(new Vector2(0, -98f), true);のような世界を初期化することにより、重力下で確認することができるように、somewher上記身体のinitalのpostionを変更

関連する問題