0

私が取り組んでいるゲーム用の 1 行のスプライト シートがあります。私はそれらをdrawable-xhdpiフォルダーでのみ提供し、他の密度では OS にサイズ変更を任せています。

このアプローチでは、次の問題が発生します。

状態を含む1750幅のスプライト シート (xhdpi幅) があり5ます。したがって、個々のスプライトには width があり1750 / 5 = 350ます。では、これhdpiは にサイズ変更される1313ため、個々のスプライトの幅は になり1313 / 5 = 262.6ます。ただし、これは実際262Rectは.sourcedrawBitmap

これに関する問題は、個々のスプライトを適切に抽出できないことです。それらを描画すると、連続する各スプライトが少し右にずれますが、これは望ましくありません。これを修正する方法はありますか?私は試してみましたが、手動でサイズを変更して1315、このサイズ変更されたバージョンをdrawable-hdpi.

注 1:個々のスプライトは、両側で多くの透明度に囲まれています (両側で同じ量)。この透明度の 1 ピクセルまたは 2 ピクセルを失う余裕はありますが、中間の透明でない部分をシフトすることはできません。

注 2:これは の間だけで発生するわけではありませんxhdpi -> hdpi。他の密度クラスにサイズ変更する場合も、同じ問題が残ります。解決策は一般的である必要があります。サイズ変更係数(または少なくとも6/84/8および3/8)、幅、個々のスプライトの量に関係なく。

問題をよりよく理解するために、これが (自動的にサイズ変更されるスプライト) を描画する必要があるスペースであると想像してください。

| _ _ _ _ _ _ _ _ _ _ |

これは、最初のフレームがどのように描画されるかです (0 * 262 to 0 + 262スプライト シートから取得した、*私が気にかけている非透明部分を表します):

| _ _ _ _ * * _ _ _ _ |

これは、2 番目のフレームの描画方法です (1 * 262 to 262 + 262スプライト シートから取得)。

| _ _ _ _ _ & & _ _ _ |

それがいつあるべきか:

| _ _ _ _ & & _ _ _ _ |

連続する各フレームについても同様です(少なくとも、連続する各フレームについてはそう思います。実際のデバイスでは効果はそれほど目立ちませんが、そこにあります)。

4

1 に答える 1

0

スプライト シートのサイズを手動で変更しても、この問題は発生します。これを行う最も簡単な方法は、スプライト シートをビルドごとに正しいサイズで生成することです (または、スプライト シートが存在しません)。スプライトシートの各フレームは、正しく中央に配置され、可能な限り最大サイズの画像ファイルとして個別に必要です。

これで、 ImageMagick の CLIを使用できます。シェルスクリプトを使用して

  1. 各大きな画像のサイズをスプライト シートの目的の高さに変更します (縦横比を維持するために幅を調整します)。
  2. モンタージュコマンドを使用して、スプライト シートを生成します。巧妙に記述されたスクリプトは、長方形のスプライト シートを生成することさえできることに注意してください。

これで問題はないはずです。:) お役に立てれば。

于 2012-06-08T21:08:44.783 に答える