0

私は自分の娯楽のために、また Java の 2d API に慣れるために、基本的なスプライト エンジンを作成しています。現在、必要なアニメーションのさまざまなスプライトとさまざまなフレームを表すために、背景が透明な多数の個別の .png ファイルを使用しています。ほとんどの「現実世界」のゲーム開発プロジェクトでは、1 つのファイル内に複数のスプライトまたはアニメーション フレームを含む「スプライト シート」を使用しているようです。また、ネイティブの画像透過サポートを利用するのではなく、スプライト パレットに表示されない任意の色を透過色として指定することがよくあります。このようなファイルをプログラムでどのように管理しますか?

  • あるスプライトの開始位置と次のスプライトの開始位置をどうやって知るのですか?
  • 透明性をどう扱うか

私がここで考えていなかった他の要因があるかもしれないので、私が物事を考えたり、人々が提案したりしたときに、上記のリストに追加するかもしれません (コメントでそうしてください)。

4

4 に答える 4

1

私は現在、単純なスプライト エディタによって生成された XML ファイルを使用しています。このファイルは、スプライトを (オプションでアニメーション化された) ポーズのコレクションとして保存し、フレームまたはセルのコレクションにします。フレームは、シート内のフレームの x および y オフセット、セルの幅と高さ、変換 (サイズ変更/回転/色相など) などのフレームごとの情報を格納します。ポーズは、個々のフレームとアニメーション情報 (速度など) と、プログラム内で簡単に識別できるようにポーズ名を格納します (hero.pose = sprite.pose["standing_right"])。スプライトは、向きごとのポーズなど、いくつかのポーズを保持するためのドキュメント ルートとして機能します。

以前に使用した柔軟性の低い代替手段は、セルとシートに固定サイズを指定し、これらの値に基づいてフレームのオフセットとサイズを計算することでした (たとえば、幅は常に 32 ピクセルなので、3 番目のスプライトは 32 * 2 になります)。その後、固定セルのサイズに収まらないスプライトのファイル名 (例: sprite_name_32x64.png) でこれらのサイズを指定するようになりました。特に、ほとんどの値を入力し、スプライトを他のスプライトのテンプレートとして使用できる単純化されたエディターでは、新しいアプローチがより気に入っています。

PNG 画像に保存されているアルファと透明度の情報を直接使用するので、別の場所に保存することを心配する必要はありませんが、スプライトごとに固定値を選択してどこかに保存する方法もありますが、ポーズの左端のピクセルを使用する場合は常に空であることを知っておいてください。それら、スプライト マスクなどを使用している場合は、特定のパレット エントリを使用してください。

于 2008-11-18T07:44:12.240 に答える
0

各シーケンスのサイズと数を知っているスプライト シートを作成します。

シートのバッファリングされた画像を取得し、次のようなものを使用します。

currentframe=spritesheet.getSubimage(x, y, w, h); 

x と y は、現在のフレームに基づいて変化します。幅と高さを同じに保つと、身軽になります。

ゲーム全体を 1 枚のシートにまとめようとするのは忘れてください。むずかしくて扱いにくい。アニメーション シーケンスごとに新しい png を使用します。スペースを節約することに熱心な場合は、右に移動するアニメーションのみを作成し、バッファリングされた画像をリアルタイムで反転して左に移動します。

Java はアルファ付きの png ファイルを読み取るので、透過色について心配する必要はありません。全てpngで描きます。Photoshop または Gimp を使用します。

Google で Java イメージ TYPE_INT_ARGB を検索します

于 2010-05-03T19:50:09.863 に答える
0

Javaについてではありませんが、通常、すべてのスプライトを同じサイズにすることができます。したがって、単純な for ループを使用して、ゲーム (またはアプリ) でスプライトを生成できます。

ただし、スプライトのサイズが異なる場合、スプライトシートのサイズに問題が生じる可能性があります (予想よりも大きくなる可能性があります)。したがって、コード内でスプライト画像を見つけるには、スプライトシートの xml または json ファイルを定義する必要があります。スプライト シート エディタ (たくさんありますが、私はSprite Masterを使用しています) を使用して、スプライト シートと座標データをすばやく簡単に生成できます。

于 2012-01-08T20:24:51.493 に答える
-1

まあ、それらのほとんどはカスタムなので、それらの詳細は実装者次第です。通常、ファイルは、高さ/幅、エンコード、透明度などの詳細を含むヘッダー情報で始まります。

1 つのファイルを開いたり読み取ったりする場合と比較して、複数のファイルを開いたり読み取ったりするのは非常にコストがかかるため、多くの場合、物事は 1 つのファイルにあります。多くのゲーム エンジンは、単一のファイルをファイル システムとして扱うために、圧縮率がゼロの zip または「zip ライク」ファイルを使用します。

于 2008-11-18T00:55:55.870 に答える