2

現在、トップダウン ビューの 2D ゲームに取り組んでおり、スプライトとスプライトの処理について多くのことを学んでいます。私の質問は、32 方向まで回転できる一連のスプライトを処理する方法です。

現時点では、特定のオブジェクトのスプライト シートには、オブジェクトが常に 0 度を向くようにすべてのアニメーションが配置されています。さて、オブジェクトは最大 32 方向に回転できるため、その元のスプライト シートを操作する最善の方法は何でしょうか。私の現在の最良の推測は、オブジェクトが最初にゲームにロードされたときに、基本的に 32 個の追加のスプライト シートを動的に作成し、そのタイプのオブジェクトの後続のすべてのインスタンスがそれらのスプライト シートを共有するようにすることです。

とにかく、この点に関するアドバイスは役に立ちます。質問を言い換える必要がある場合はお知らせください。ありがとう

編集:より明確にするために推測します。たとえば、1 ピースあたり 5 フレームの 2 つのアニメーションを持つオブジェクトがある場合、これは非常に簡単に作成および整理できるスプライト シートであり、単純な 2x5 グリッド (レイアウト方法によっては 5x2) です。しかし問題は、これら 2 つのアニメーションを 32 方向に回転させる必要があることです。これは、最終的に 320 の個々のスプライトが存在することを意味します。パフォーマンスとフレームレートが気になるので、フレームごとにその場でスプライトを回転させることはオプションではありません。では、これら 2 つのアニメーションを構成する 320 個のスプライトをどのように編成すればよいでしょうか。したほうがいいでしょうか

  • 32枚の2x5スプライトシートと考えてください
  • スプライト シートを個々のフレームに分割し、フレームごとに 32 方向の配列を作成します (つまり、32 方向スプライトの 10 配列)。
  • 他の....?
  • 関係ない?

ありがとう

4

3 に答える 3

4

スプライトの32方向は、11.25度の32回転に変換されます。

事前に計算された画像の数を8に減らすことができます。最初の90度(11.25, 22.5, 33.75, 45.0, 56.25, 67.5, 78.75, 90.0)のみを計算し、フリップ操作を動的に使用します。フリップは、基本的に画像がバッファからコピーされる順序を変更するだけなので、はるかに高速です。

たとえば、101.25度回転した画像を表示する場合は、事前に計算された67.5度の画像を読み込んで、垂直方向に反転します。

これは、グラフィックが対称である場合にのみ機能することに気づきました;-)

最新のコンピューターについて話すときは、何も最適化する必要がない場合があります。スプライトの事前計算で使用されるメモリは確かにごくわずかであり、画像を回転するときのCPU使用率もおそらく無視できます。ただし、組み込みデバイス用にプログラミングする場合は重要です。

于 2009-08-14T10:35:40.533 に答える
2

スプライトの変換の回転部分を設定することで、スプライトを直接回転させることができます。

サンプル コードについては、このpygame チュートリアルの Chimp スプライトを確認してください。チンパンジーが「めまい」を起こしているときにスプライトを回転させます。

于 2009-08-14T00:51:48.520 に答える
1

通常、プロセッサ時間またはメモリのいずれかを犠牲にするため、この 2 つのバランスを取る必要があります。プロセッサに大きな制限があるか、多くの高価なものを計算していない限り、すべてをメモリに入れる本当の理由はありません. 変換を使用していくつかのスプライトを回転させることは十分に安価であるため、メモリに 32 倍の情報を保存する価値はありません。特に、その情報は画像の束であり、画像は相対的に多くのメモリを使用するためです。

于 2009-08-18T22:18:49.177 に答える