1

Xnaのピクセルごとの衝突の背後にある理論を理解しています。2つのテクスチャからテクスチャデータを取得し、それらを比較して、たとえばキャラクターテクスチャのアルファ値を確認します。

私がやりたいのは、ピクセルごとの衝突を使用して、特定の色(黒)との衝突をチェックすることにより、プレーヤースプライトがマップに触れたかどうかをチェックすることです。以前にこれを実装しようとしましたが、プログラミングエラーがスローされることなく、文字は常にマップを通過します。記事/チュートリアル/ビデオを教えてください。または、ここにいる誰かが私にいくつかのヒントやポイントを教えてくれるなら、それも素晴らしいことです。

4

1 に答える 1

0

私があなただったら、2 つのテクスチャ間のピクセル間をチェックしません。ただし、マップに対して 1 つのポイントのみをチェックすることはそれほど悪くありません。

//In Class-scope:
Color[] CollisionMapData;
Texture2D CollisionMap;

public void LoadContent()  
{  
    CollisionMap = Content.Load<Texture2D>("map");  
    CollisionMapData = new Color[CollisionMap.Width * CollisionMap.Height];  
    CollisionMap.GetData<Color>(CollisionMapData);  
}  

public Boolean Collision(Vector2 position)  
{  
    int index = (int)position.Y * CollisionMap.Width + (int)position.X;

    if (index < 0 || index >= CollisionMapData.Length) //Out of bounds  
        return true;

    if (CollisionMapData[index] == Color.Black)
        return true;

    return false;
}

プレーヤー スプライト全体をマップに対してチェックするには、プレーヤー スプライトの各ピクセルに対して Collision メソッドを呼び出し、適切なポイントを取得するための vector2 を作成する必要があります。いくつかのポイントを確認する方がはるかに簡単です (たとえば、左上、中央上部、右上、左、右、左下、中央下、右下。側面は既にテストされているため、中央を確認する必要はありません)。

于 2013-02-18T12:12:21.070 に答える