Создание 2D Hell Theme Вертолет игра в XNA.Per Pixel обнаружение столкновения
Имея несколько проблем с моим обнаружением столкновений на пиксель в том смысле, что он возвращает true, когда цвета не сталкиваются.
Вот код для моего Per Pixel:
class PPCollisionDetection
{
public Rectangle rect1, rect2;
public Color[] data1, data2;
public PPCollisionDetection()
{
}
public Boolean Detect(Rectangle r1, Rectangle r2, Texture2D t1, Texture2D t2)
{
data1 = new Color[t1.Width * t1.Height];
t1.GetData(data1);
data2 = new Color[t2.Width * t2.Height];
t2.GetData(data2);
rect1 = r1;
rect2 = r2;
int top = Math.Max(rect1.Top, rect2.Top);
int bottom = Math.Min(rect1.Bottom, rect2.Bottom);
int left = Math.Max(rect1.Left, rect2.Left);
int right = Math.Min(rect1.Right, rect2.Right);
for (int y = top; y < bottom; y++)
for (int x = left; x < right; x++)
{
Color colour1 = data1[(x - rect1.Left) +
(y - rect1.Top) * rect1.Width];
Color colour2 = data2[(x - rect2.Left) +
(y - rect2.Top) * rect2.Width];
if (colour1.A != 0 && colour2.A != 0)
return true;
}
return false;
}
}
А вот где я называю Detect:
if (new Rectangle((int)Helicopter.position.X,(int) Helicopter.position.Y,(int)Helicopter.HelicopterAnimation.Rectangle.Width,(int)Helicopter.HelicopterAnimation.Rectangle.Height).Intersects(stalagtiteRectangle))
{
if (collDetect.Detect(new Rectangle((int)Helicopter.position.X, (int)Helicopter.position.Y, (int)Helicopter.HelicopterAnimation.Rectangle.Width, (int)Helicopter.HelicopterAnimation.Rectangle.Height), stalagtiteRectangle, Helicopter.HelicopterAnimation.animation,
stalagtites))
{
touched = true;
}
else
{
touched = false;
}
}
Просто предложение, чтобы найти перекрывающийся площадь двух прямоугольников может быть, вы должны использовать [Rectangle.Intersect] (http://msdn.microsoft.com/en -us/library/microsoft.xna.framework.rectangle.intersect.aspx) – pinckerman
В чем ваш вопрос? –
Можете ли вы заметить какие-либо ошибки в моем коде? Это не работает для меня! Сожалею! – Eamomck