XNA не имеет методов, поддерживающих рисование круга.
Обычно, когда мне приходилось рисовать круг, всегда с тем же цветом, я просто делал изображение с этим кругом, а затем я мог отображать его как спрайт.
Но теперь цвет круга указан во время выполнения, любые идеи, как с этим бороться?
Как нарисовать круг с определенным цветом в XNA?
Ответ 1
Вы можете просто создать изображение круга с фоном Transparent
и цветной частью круга как White
. Затем, когда дело доходит до рисования кругов в методе Draw()
, выберите оттенок как то, что вы хотите:
Texture2D circle = CreateCircle(100);
// Change Color.Red to the colour you want
spriteBatch.Draw(circle, new Vector2(30, 30), Color.Red);
Просто для удовольствия, вот метод CreateCircle:
public Texture2D CreateCircle(int radius)
{
int outerRadius = radius*2 + 2; // So circle doesn't go out of bounds
Texture2D texture = new Texture2D(GraphicsDevice, outerRadius, outerRadius);
Color[] data = new Color[outerRadius * outerRadius];
// Colour the entire texture transparent first.
for (int i = 0; i < data.Length; i++)
data[i] = Color.TransparentWhite;
// Work out the minimum step necessary using trigonometry + sine approximation.
double angleStep = 1f/radius;
for (double angle = 0; angle < Math.PI*2; angle += angleStep)
{
// Use the parametric definition of a circle: http://en.wikipedia.org/wiki/Circle#Cartesian_coordinates
int x = (int)Math.Round(radius + radius * Math.Cos(angle));
int y = (int)Math.Round(radius + radius * Math.Sin(angle));
data[y * outerRadius + x + 1] = Color.White;
}
texture.SetData(data);
return texture;
}