2016-12-19 16 views
0

私はまったく新しいここにanywho ...私はアンドロイドのゲームアプリケーションの開発に興味を持っています。私は自分の方法で、Libgdxをゲームエンジンとして使用し、小さなゲームをエキサイティングなものにしました。Libgdx、Bodyにアニメーションを付けることはできますか?

私は最近、World変数を使用してボディを作成する方法を学び始めました。Actorを拡張するクラスを作成し、アニメーションを与えて(アニメーションを与える方法を知っています)、それを体はどこに行くのか、体はどこに行くのですか?アニメーションはその上で再生されます(基本的にアニメーションの下には表示されない体です)

私の質問はです。体の中にそれを再生するので、体の中に?(添付)

助けてくれてありがとう!

** NOTE:私の知識は、私はプログラム工学の大学の学生です、私は(私の大学は、ゲームエンジンを教えていない)まだ完全にJavaで多くの深さにはないです、まだ限られていることに注意してください**

私は衣装のクラスを作成しているUPDATE

は、

(herowalkのような、herosit ...など...)各アクションにアニメーションを作った私はそれでrenderメソッドを書いた:

public void render(SpriteBatch batch) { 
    float posX = bbody.getPosition().x * PPM; 
    float posY = bbody.getPosition().y * PPM; 

    float rotation = (float) Math.toDegrees(bbody.getAngle()); 

    sprite.setPosition(posX,posY); 
    sprite.setRotation(rotation); 

    sprite.draw(batch); 
} 

と体を作成し、私の画面の真ん中にそれを配置し、SetUserDataを(使用して、それにスプライトを添付):

BodyDef bdef = new BodyDef(); 
    bdef.position.set(160/PPM, 200/PPM); 
    bdef.type = BodyDef.BodyType.DynamicBody; 
    PolygonShape shape = new PolygonShape(); 
    shape.setAsBox(5/PPM, 5/PPM); 
    bbody = world.createBody(bdef); 
    Bodyarray.add(bbody); 
    FixtureDef fdef = new FixtureDef(); 
    fdef.shape = shape; 
    fdef.filter.categoryBits = BIT_BOX; 
    fdef.filter.maskBits = BIT_PLATFORM | BIT_BALL; 
    bbody.createFixture(fdef); 
    bbody.setUserData(sprite); 

と私は私が書いたバッチを描く私のメインクラスで:

player.sprite.setRegion(player.getAnimationup().getKeyFrame(dt, true)); 
     dt += elapsedTime; 
     player.render(batch); 

アニメーションを常に変更するかどうかは、プレーヤーが右、左、上、下に向かうかどうかによって決まります。

私が持っている唯一の問題は、画面の左下に描画されているスプライト(アニメーションが完璧に動作する)が0,0でなく、x、yのように見えることです私は体を動かすときにそれに付いていることを見ることができます(私は体の動きをコントロールするコントロールを置いています)。

例えば、身体とスプライトのX、Yの調整をいつものようにGdx.app.logでチェックしようとしていて、どちらもSと同じ正確なXとYを持っています。(ofcはPPMスプライトが物理的なボディではないため、スプライトが物理的なボディではないため、スプライトの位置を100に設定してください)

スプライトの場所が間違っていますか?

答えて

1

ようこそスタックオーバーフロー!

あなたの質問に対する答えは「正確ではありません」です。 Box2DにはBody#setUserData()というメソッドがあり、Bodyから任意のオブジェクトへの参照を作成することができます(この場合はAnimationオブジェクトですが、位置を同期させるのはあなた次第です)。下記の擬似コードはfrom the libGDX wikiの適応を参照してください:あなたはlibGDXを学び始めるよう

// Create an array to be filled with the bodies 
// (better don't create a new one every time though) 
Array<Body> bodies = new Array<Body>(); 
// Now fill the array with all bodies 
world.getBodies(bodies); 

for (Body b : bodies) { 
    // Get the body's user data - in this example, our user 
    // data is an instance of the Entity class 
    Animation anim = (Animation) b.getUserData(); 

    if (anim != null) { 
     // Update the entities/sprites position and angle 
     TextureRegion frame = anim.getKeyFrame(...); 
     // Now draw the frame using b.getPosition() and b.getAngle() 
    } 
} 

ところで、libGDX wiki優れリソースとリファレンスです。

+0

ありがとうございます。 :D、私の更新を読んでください、私はいくつかの進歩を遂げました – aDeadPixel

関連する問題