0

ねえ、私は現在、XNA4.0を使用して古き良きモータルコンバットのような2D戦闘機を作っています。とにかく、私は現在パンチアニメーションをプログラムしようとしています。

プレーヤーはアイドル状態にあり、左コントロールを押すと、プレーヤーはパンチする必要があります。

ここで、プレーヤーが画面の左側を向いていると仮定します。私のスプライトはすべて右向きに描かれています。したがって、プレーヤーがパンチすると、スプライトが反転して描画されます。

問題は、アニメーションによって、反転したパンチフレームの左端がアイドルフレームの左端に位置合わせされているため、プレーヤーが突然右にテレポートしたように見えることです(少なくとも私はそう思います)。私はこれを修正する方法を考えることができないようです。

私のコードは今かなり大きいです。誰かが問題の可能性のあるセクションを特定できれば、そのコードを投稿できれば幸いです。

4

2 に答える 2

1

正しければ、このオーバーロードを使用して描画できます。

SpriteBatch.Draw (Texture2D, Rectangle, Nullable<Rectangle>, Color, Single, Vector2, SpriteEffects, Single) 

msdnから:指定されたテクスチャ、宛先の長方形、ソースの長方形、色、回転、原点、効果、およびレイヤーを使用してレンダリングするために、スプライトのバッチにスプライトを追加します。

したがって、スプライトの原点を中心として渡すことができます。たとえば、スプライトは中心を中心に回転します。回転に最適な原点を見つけるだけです。

于 2012-05-09T00:25:46.933 に答える
0

さて、私はその問題を修正しました。確かに問題はスプライトシートでした。それを設計した人は、各フレームの各画像を中央に配置しませんでした。

それで、彼はすべての画像を中央に配置しましたが、フレームのサイズはさまざまでした。しかし、その問題は解決しませんでした。

いくつかのデバッグの後、私は何が起こっているのかを理解しました。アイドルフレームでは、それらのフレームの文字の両側に2ピクセルのスペースがありました。パンチフレームでは、これらのフレームの文字の両側に23ピクセルのスペースがありました。

私のDraw()機能は、2D位置ベクトルに基づいて各フレームを描画することでした。この位置Vectorは、各フレームの左上隅を指定します。

アイドルフレームとパンチフレームは、各フレームのキャラクターの左側でピクセル幅が異なるため、プレーヤーがパンチを押すと、キャラクターが「テレポート」されたように見えます。

この問題に対する私の解決策-すべてのフレームサイズを同じにします!これで私の「テレポート」の問題は解決しました。しかし、私はこの問題に対する代替の解決策を見つけることができませんでした。

今、私が理解していないことが1つあります。スプライトシートがさまざまなフレームサイズで構成されているゲームはたくさんあります。彼らはこのテレポートの問題なしにそれらをどのように使用しますか?!

于 2012-05-24T14:12:58.263 に答える