有没有办法画圆圈?我不想使用纹理/精灵来画一个圆圈因为玩家是圆圈所以圆圈应该移动......而且我也试图让它变成玩家/圆圈'尺寸变得越来越大当他吃一些食物blablabla ...
无论如何,如果有人知道该怎么做请告诉我。
其他方式:有改变纹理高度/宽度的方法,然后我将制作一个简单的圆形纹理并改变它的高度/宽度。
感谢。
答案 0 :(得分:1)
您可以使用3D原语,如“某人”等。产品:>已发布或使用C3.XNA.Primitives2D库,您可以使用SpriteBatch的扩展来绘制圆圈
public static void DrawCircle(this SpriteBatch spriteBatch, Vector2 center, float radius, int sides, Color color, float thickness);
如果对半径和厚度使用相同的值,则圆圈显示为填充。 我没有找到offizial下载链接,但也有sourceforge上传。
您还可以通过以下代码动态生成圆圈:
public static Texture2D GenerateCircleTexture(GraphicsDevice graphicsDevice, int radius, Color color, float sharpness)
{
int diameter = radius * 2;
Texture2D circleTexture = new Texture2D(graphicsDevice, diameter, diameter, false, SurfaceFormat.Color);
Color[] colorData = new Color[circleTexture.Width * circleTexture.Height];
Vector2 center = new Vector2(radius);
for (int colIndex = 0; colIndex < circleTexture.Width; colIndex++)
{
for (int rowIndex = 0; rowIndex < circleTexture.Height; rowIndex++)
{
Vector2 position = new Vector2(colIndex, rowIndex);
float distance = Vector2.Distance(center, position);
// hermite iterpolation
float x = distance / diameter;
float edge0 = (radius * sharpness) / (float)diameter;
float edge1 = radius / (float)diameter;
float temp = MathHelper.Clamp((x - edge0) / (edge1 - edge0), 0.0f, 1.0f);
float result = temp * temp * (3.0f - 2.0f * temp);
colorData[rowIndex * circleTexture.Width + colIndex] = color * (1f - result);
}
}
circleTexture.SetData<Color>(colorData);
return circleTexture;
}
低于1f的清晰度使圆圈模糊。
答案 1 :(得分:0)
绘制图元(例如圆圈)的唯一方法是3D: https://msdn.microsoft.com/en-us/library/bb196414.aspx
或者你可以加载一个1 * 1的纹理,将它拉伸成一条线然后用一堆这些线来制作一个圆圈。 使用:
public void Draw (
Texture2D texture,
Vector2 position,
Nullable<Rectangle> sourceRectangle,
Color color,
float rotation,
Vector2 origin,
Vector2 scale,
SpriteEffects effects,
float layerDepth
)
拉伸纹理。
或者你可以使用圆形纹理并拉伸它。
如果您正在制作像agar.io这样的东西,那么您可能希望使用与圆基元结合的纹理,这样您就可以使圆圈“摇摆不定”。