public static CollisionReport DetectCollision(CollisionObject objectOne, CollisionObject objectTwo, GameTime gameTime) { CollisionObject mainObject; CollisionObject secondObject; CollisionReport report = new CollisionReport(objectOne, objectTwo); if (objectOne.ColorArray.Length < objectTwo.ColorArray.Length) // This is to minimize the number of pixels examined { mainObject = objectOne; secondObject = objectTwo; } else { mainObject = objectTwo; secondObject = objectOne; } float stepSize = 0.001f; for (int stepNum = 0; stepNum < gameTime.ElapsedGameTime.Milliseconds / 1000.0f / stepSize; stepNum++) { for (int x = 0; x < mainObject.ColorArray.GetLength(0); x++) { for (int y = 0; y < mainObject.ColorArray.GetLength(1); y++) { Vector2 colorScreenPosition = mainObject.GetTransformedScreenPosition(x, y); Color colorOne = mainObject.ColorArray[x, y]; Color colorTwo = secondObject.GetColorAtScreenPosition((int)colorScreenPosition.X, (int)colorScreenPosition.Y); if (colorOne.A > 0 && colorTwo.A > 0) { report.RecordCollision(colorScreenPosition); return(report); } } } mainObject.Step(stepSize); } return(report); }