仅在可见精灵周围形成边界框

时间:2010-12-29 03:45:22

标签: c# .net xna

这个网站对于帮助我进行游戏开发非常棒,但我无法找到以下问题的答案(我也无法自行解决)。

我正试图在游戏中进行矩形碰撞。我的想法是1)获得原始碰撞边界矩形2)转换纹理(pos / rot / scale)3)将项目的因子更改为矩阵,然后使用此矩阵更改项目的原始碰撞边界。

然而,我的纹理包含很多透明度,透明度会影响纹理的整体高度/宽度(我这样做是为了保持两个维度的力量)。

我的问题:如何创建一个矩形,形成忽略对象周围透明度的维度。下面提供了一张图片:

alt text

3 个答案:

答案 0 :(得分:1)

我猜你可以从顶部开始逐步浏览边界矩形中的每一行像素,通过检查其alpha值(Color.A!= 0)来检查你第一次点击带有颜色的像素。

这样你就可以获得矩形的Y坐标。

然后从边界矩形的左边开始逐步浏览每一列,寻找第一个彩色像素。

你会以这种方式获得X.

然后再次穿过每一行,但从底部开始,你将获得高度。 然后再次单步执行每一列,但从右侧开始,您将获得宽度。

希望有所帮助

答案 1 :(得分: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)

我不知道此操作对于碰撞检测有多贵。

答案 2 :(得分:1)

我知道我的游戏,我使用圈子。如果您的物体是合理的圆形,它通常可以提供更接近的估计,并且碰撞检测很容易。如果物体中心之间的距离小于半径之和,则它们会发生碰撞。

如果圈子是不可能的,那么muku或Dois提供了不错的答案。