1

我正在尝试在 xna 中制作一个小型 2d 游戏。

好吧,问题来了:

如何检测两个组件发生碰撞看下图:

在此处输入图像描述 上面的组件是2个PNG组件格式

我成功地将这些组件放入和移动到我的游戏中。

现在我想在它们碰撞时检测这些组件。我也制作了碰撞代码,但这一切都基于图片的尺寸,所以如果按像素碰撞没有颜色,但是它们包括图片之间的尺寸。(我的意思是就像基于图片尺寸的碰撞半径)和在像素颜色之间的碰撞之前,它们将被视为碰撞

好吧,我该怎么做?

4

1 回答 1

2

更改您的碰撞代码以返回可能发生碰撞的矩形,然后使用该区域检查每个像素的每个 alpha 值。如果您想更详细地查找它,则称为逐像素碰撞检测。

编辑:

//Load the texture from the content pipeline
Texture2D texture = Content.Load<Texture2D>("Your Texture Name and Directory");

//Convert the 1D array, to a 2D array for accessing data easily (Much easier to do            
Colors[x,y] than Colors[i],because it specifies an easy to read pixel)
Color[,] Colors = TextureTo2DArray(texture);

而 TextureTo2DArray() 是

Color[,] TextureTo2DArray(Texture2D texture)
{
    Color[] colors1D = new Color[texture.Width * texture.Height]; //The hard to read,1D array
    texture.GetData(colors1D); //Get the colors and add them to the array

    Color[,] colors2D = new Color[texture.Width, texture.Height]; //The new, easy to read 2D array
    for (int x = 0; x < texture.Width; x++) //Convert
        for (int y = 0; y < texture.Height; y++)
            colors2D[x, y] = colors1D[x + y * texture.Width];

    return colors2D;
}
于 2012-12-27T15:06:29.483 回答