2016-04-20 24 views
0

LibGDXでアニメーションを反転しようとしていますが、幅が異なるためアニメーションが変わってしまいます。ここで問題です:異なるサイズの滑らかな画像を反転する

あなたは、あなたがパンチ時にアニメーションが "左" 再生すると、見ることができるように

enter image description here

(赤い点は、X/Yは、{0,0}座標マーク)フィートはそれよりも後ろから始まりますが、右にパンチすると、両方のアニメーションの原点が左隅であるため、アニメーションがうまく動作するため、トランジションはスムーズです。

私が欲しいものを達成するために考えている唯一の方法は、アニメーションが再生しているものを見て、それに応じて座標を調整することです。これにアプローチする方法として

public static float draw(Batch batch, Animation animation, float animationState, 
     float delta, 
     int posX, int posY, boolean flip) { 
    animationState += delta; 
    TextureRegion r = animation.getKeyFrame(animationState, true); 
    float width = r.getRegionWidth() * SCALE; 
    float height = r.getRegionHeight() * SCALE; 

    if (flip) { 
     batch.draw(r, posX + width, posY, -width, height); 
    } else { 
     batch.draw(r, posX, posY, width, height); 
    } 

    return animationState; 
} 

任意の提案を歓迎です:

これは、コードがあります。

答えて

1

他のパラメータを使用して、他のbatch.drawオプションを使用します。 「原点」パラメータを設定することができます。これはホットスポットのようなものです...画像の中心...回転すると、回転がそのホットスポットの周りで行われます。

https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/g2d/Batch.html

私はひっくり返すためにそれを使用していないが、それは同じように動作するはずです。しかし、そうでなければ、あなた自身で座標を調整しなければならず、すべてのフレームのXオフセットでいくつかのリストを作成し、反転した画像に追加する必要があります。

他の解決策は、より広いフレーム画像を有し、文字の中心が常に画像の中心と一致するようにすることである。そうすれば、あなたの画像はより広いものになります。空きスペースがあるでしょうが、フレーム数が正しければそれは受け入れられます。

+0

ありがとうございました。 originXを設定しようとしましたが、うまく動作しませんでした。静的な幅(文字がアイドルのときの幅)を使っていくつかの結果を得て、他のスプライトを中心に調整しようとしましたが、いくつかのアニメーションはOKと他のものを中心から外します。すべてのスプライトを同じ幅に設定しようとしますが、合計で65です。 – Jh62

+0

originXとoriginYを設定しようとしましたか? 1つの値だけを設定しても動作するかどうかわからない... – MilanG

+0

はい。ここで見ることができるように[リンク](http://i.imgur.com/dgowc3z.png)画像間の遷移の感触を与える足は、常にフレームごとに中央から外れています。 1つの値のみを中心にします。私はいくつかの異なる方法を試しました(すべてのフレームを同じ幅/サイズにすることさえできます)。そして、私が1つのアニメーションを修正すると、他のアニメーションが壊れてしまいます。私はもっ​​と良い解決策は、私が何か好きではない、手ですべてのフレームのオフセットを作ることだと思う:( – Jh62

関連する問題