2010-12-29 14 views
1

このサイトはゲーム開発を手伝ってくれて本当に素晴らしいですが、私は次の質問に対する答えを見つけることができません。表示されているスプライトの周りだけにバウンディングボックスを作成

私はゲームで長方形の衝突をしようとしています。私のアイデアは、1)元の衝突の境界矩形を得ることです。2)テクスチャを変換します(pos/rot/scale)。3)項目を行列に変換し、この行列を使用して項目の元の衝突範囲を変更します。

しかし、私のテクスチャには、テクスチャの全体の高さ/幅に影響を与える透明度、透明度が多く含まれています(2次元のパワーを維持するためにこれを行います)。

私の問題:オブジェクトの周りの透明度を無視する寸法を形成する四角形を作成する方法。画像は、以下に提供される:

alt text

答えて

1

私はあなたの最初のアルファ値をチェックすることによって、色の画素を打つときに(上から順にチェックし、外接矩形内のピクセルの各行をステップ可能性が推測Color.A!= 0)。

こうすれば、長方形のY座標が得られます。

次に、境界矩形の左から順に、最初の色のピクセルを探します。

このようにXを取得します。

次に、各行を再度ステップしますが、下から開始して、高さを取得します。 その後、各列を再度ステップしますが、右から順に幅を取得します。

助けてくれること

1

私はdois答えがそれをする方法だと思います。私は、次のコードを使用して、テクスチャ内の特定のポイントでピクセル値を検索します。このコードを変更してピクセル単位で行を取得し、透明性をチェックし、透明でないピクセルを含む行を見つけたら停止することができます。ピクセルが透明でない場合

Color[] colorData = new Color[1]; 
Texture2D texture = //Get your Texture2D here 
texture.GetData<Color>(0, new Rectangle(targetPoint.X, targetPoint.Y, 1, 1), colorData, 0, 1); 

を確認するには、私はこれを行う:

if(colorData[0].A > 0) 

私は、この操作はしかし衝突検出のためにすることができますどのように高価なのか分かりません。

+0

パフォーマンスは問題ではありません。ロード時にバウンディングボックスを計算し、後で使用するためにキャッシュするだけです。 – YellPika

1

私のゲームでは、私はサークルを使用しています。あなたのオブジェクトが合理的に丸い場合、それはしばしばより近い見積もりを提供し、衝突検出は容易に死んでしまう。オブジェクトの中心間の距離が半径の合計よりも小さい場合、それらは衝突しています。

円が問題にならない場合、mukuまたはDoisはまともな回答を提供していません。

関連する問題