1

現在、各レベルには3つのレイヤーがあります。

  • バックグラウンド
  • 衝突(壁、見えない壁、地面など)
  • 前景

私のキャラクタースプライトには、衝突を検出するための1ピクセルがあります。この文字クラスには、衝突レイヤーのすべてのピクセルを含むColor[]があります。

Color[]キャラクターのピクセル検出の位置を計算し、 ( "CharactersPixel")で使用できるintを取得します。

if ( Color[CharactersPixel].A != 0 )
    Then collision.

それは完璧に動作します。

ただし、コリジョンレイヤーは、パーティクルやモンスターなど、他のすべてのオブジェクトで使用する必要があります。

衝突レイヤーには約380万ピクセルがあります。だからColor[]同じです。

これColor[]をすべてのオブジェクトに追加すると、RAMが多すぎますよね?

4

1 に答える 1

2

衝突レイヤーへの参照をオブジェクトに追加するだけです。すべてを各オブジェクトにコピーしているわけではありません。参照を追加しても、オブジェクトに多くのメモリは追加されません。

ただし、任意のオブジェクトにアクセスできる場所でレベルデータを公開することにより、より一般的な方法で衝突を利用できるようにすることをお勧めします。おそらく、アクセシブルなプロパティとして、Gameプロパティとしてクラスにデータを追加することができます。CurrentLevelCollisionData

通常、衝突データを実際のレンダリングカラーから分離し、衝突データの形状にほぼ一致する代わりに、ボックスなどでより単純な衝突を実行します。これにより、最終的には、環境に影響を与える角度や適切な物理学の計算などを簡単に計算できるようになります。ピクセル間の衝突はまれであり、パフォーマンスの観点からも問題になる可能性があります。

于 2012-08-29T17:36:23.130 に答える