あまりわかりやすいタイトルではないかもしれませんが、頑張っています。StackOverflow に投稿するのは初めてで、C# でのプログラミングには比較的慣れていません (最初は約 1 年前に Unity を使用して開始し、数日前に XNA にアップグレードすることにしました)。そうは言っても、私に親切にしてください。
私は設計中の 2D ゲームの仕組みを計画しています。XNA で遊んだ後はほとんどが簡単に思えますが、満足のいく答えがまだ出ていない 1 つの問題に何度も戻ってきます。為に。この問題には、スプライトを複合/複雑なスプライトにレイヤー化することが含まれます。たとえば、ゲーム内のキャラクターは、任意の数の武器のうちの 1 つまたは 2 つを使用している可能性があります。このトピックについて少し調査したところ、RenderTarget クラスを使用して一連のスプライトを 1 つに描画することを推奨する人もいれば、Draw() 中にスプライトを重ねて描画することを推奨する人もいます。ただし、これらのトピックは主に、ゲーム内に 1 人のキャラクターがいるという比較的単純なケースに焦点を当てていました。
私の場合、ゲームには、まったく異なる姿勢/アニメーションを持つ多数のスプライト ベースのキャラクターが含まれます。現在は約 10 個あり、開発中にさらに追加される可能性があります。同様に、キャラクターに合成される多数の武器 (おそらく最初は約 20) があります。それくらい気が楽です。ただし、問題は、キャラクターのアニメーションの各フレームで、各キャラクターの武器スプライトを異なる場所に異なる回転で描画する必要があることです。
これを実現する方法についていくつかのアプローチを検討しましたが、いずれもかなり大きな欠点があります。
1 つ目は、各キャラクターの各武器のスプライトシートを単純に描画することでした。これは、適切なキャラクターと同じサイズになります。このアプローチの利点は、計算を行うことなく、ベース キャラクターの上に追加のスプライトを描画するための呼び出しを追加するだけで簡単になることです。欠点は、余分なスプライト シートが大量に作成されることです (10 キャラクター x 20 武器に対して 200 枚の余分なシート)。
2 つ目は、武器のスプライトを処理するクラスを作成することでした。WeaponSprite クラスは、武器ごとに 1 つのテクスチャにアタッチされ、アタッチされているキャラクターに基づいて、描画時に使用するオフセット/回転に関する情報を格納します。これに関する問題は、フレームごとにオフセット/回転を整理するのは非常に面倒であり、必要なフレームに基づいて情報を取得する簡単な方法が思いつかないことです。(各キャラクターのアニメーション名、向き、フレーム番号を追跡する AnimationFrame クラスを作成し、武器クラスの辞書を使用して、現在のフレームの名前に基づいて適切なデータをロードするというアイデアがありました。しかし、そのアイデアについての何かが本当に考えが間違っているように見えました)。この方法には、プルオフするために比較的大量のメモリが必要になるという欠点もあります (Vector2 が 8 バイトで float が 4 であると仮定すると、10 のキャラクターと 20 の武器がある場合、現在使用されているフレーム数を考えると 192 KB のメモリが必要になります。より多くの武器が追加されるにつれて、これは大きくなるだけです)。私は、予約されたアルファ値ピクセルを使用して各武器のオフセットと「原点」をリンクし、実行時に位置を計算し、次に前述のディクショナリに回転フロートを格納するだけです。より多くの武器が追加されるにつれて、これは大きくなるだけです)。私は、予約されたアルファ値ピクセルを使用して各武器のオフセットと「原点」をリンクし、実行時に位置を計算し、次に前述のディクショナリに回転フロートを格納するだけです。より多くの武器が追加されるにつれて、これは大きくなるだけです)。私は、予約されたアルファ値ピクセルを使用して各武器のオフセットと「原点」をリンクし、実行時に位置を計算し、次に前述のディクショナリに回転フロートを格納するだけです。
私は XNA を初めて使用するので (そして C# についてはまだかなり未熟です)、投稿して専門家の意見を取り入れようと考えました。私の方法は正しい方向に進んでいますか? ご協力いただきありがとうございます。追加情報が必要な場合はお知らせください。