//a = player 1 x1,y1 b = player 2 x2,y2 public static bool Intersects(Texture2D a, Texture2D b) { // if (Collision.Intersects(a.bounds, b.bounds)) { uint[] bitsA = new uint[a.Width * a.Height]; a.GetData(bitsA); uint[] bitsB = new uint[b.Width * b.Height]; b.GetData(bitsB); //later change this to player.Texture2D // player.x , y .. player2.x, y int x1d = Math.Max(x, x2); int x2d = Math.Min(x + a.Width, x2 + b.Width); int y1d = Math.Max(y, y2); int y2d = Math.Min(y + a.Height, y2 + b.Height); for (int yd = y1d; y < y2d; ++y) { for (int xd = x1d; x < x2d; ++x) { if (((bitsA[(xd - x) + (yd - y) * a.Width] & 0xFF000000) >> 24) > 20 && ((bitsB[(xd - x2) + (yd - y2) * b.Width] & 0xFF000000) >> 24) > 20) return true; } } } return false; } -- when running I get a "An unhandled exception of type 'System.IndexOutOfRangeException' on: if (((bitsA[(xd - x) + (yd - y) * a.Width] & 0xFF000000) >> 24) > 20 && ((bitsB[(xd - x2) + (yd - y2) * b.Width] & 0xFF000000) >> 24) > 20) return true; --