C# 中拉绳中的叠加字符
Superimposed chars in drawstring in C#
我正在做一个游戏,它就像一条蛇,但是当你在游戏开始时输入一些东西,你输入的单词变成了蛇的body。
所以...我几乎已经想通了,但是在画蛇的时候,字母重叠了,我想把它们分开。
这是我的代码:
private void pbArea_Paint(object sender, PaintEventArgs e)
{
Graphics area = e.Graphics;
if(!Config.FinJuego)
{
//Set snake color
Brush colorVib;
//Snake body colors
for(int i=0; i< Viborita.Count; i++)
{
if (i == 0)
colorVib = Brushes.Black; //Draws the head
else
colorVib = Brushes.OrangeRed; //Draws the rest of the body
//Draws full snake
foreach (char c in nombre)
{
area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
new SolidBrush(Color.Black), Viborita[i].X * Config.Ancho, Viborita[i].Y * Config.Alto);
}
//Draw food
area.FillEllipse(Brushes.Green,
new Rectangle(comida.X * Config.Ancho,
comida.Y * Config.Alto, Config.Ancho, Config.Alto));
}
}
else
{
string finjuego = "Fin del juego.\nTu puntuación final fue: " + Config.Puntuacion +
"\n Presiona la tecla Enter para reintentar.";
if (RecordFinal==0)
{
Record = Config.Puntuacion;
RecordFinal = Record;
}
if(Config.Puntuacion>RecordFinal)
{
RecordFinal = Config.Puntuacion;
}
lbFinJuego.Text = finjuego;
lbFinJuego.Visible = true;
}
}
所以,如您所见,我正在使用 DrawString,"area" 它是一个 PictureBox,"Viborita" 它是项目的名称,所以...有什么想法吗?
很抱歉,如果我不清楚,那是因为我不会说我的母语,如果您对代码中的某些内容有任何疑问,请告诉我,顺便谢谢。
好吧,好像Viborita[i]是第i条蛇的位置。问题是你没有跟踪蛇是如何卷曲的,或者它是什么形状。我建议你创建一个 Snake class 来跟踪蛇头的位置和它的位置其他字符,以及任何其他相关数据。
此外,您每次绘制字符时都在创建新字体和新画笔。最好把你的画笔和字体放在 class 这个所在的字段里。
所以……问题解决了。问题是这样的:
area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
new SolidBrush(Color.Black), Viborita[i].X * Config.Ancho, Viborita[i].Y * Config.Alto);
我没有使用 "Viborita[i].X * Config.Ancho" 和 "Viborita[i].Y * Config.Alto",而是使用了这个:
Ancho = Viborita[i].X * Config.Ancho;
Alto = Viborita[i].Y * Config.Alto;
foreach (char c in nombre)
{
area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
new SolidBrush(Color.Black), Ancho, Alto);
Ancho += 14;
}
这解决了我的问题。
我正在做一个游戏,它就像一条蛇,但是当你在游戏开始时输入一些东西,你输入的单词变成了蛇的body。
所以...我几乎已经想通了,但是在画蛇的时候,字母重叠了,我想把它们分开。
这是我的代码:
private void pbArea_Paint(object sender, PaintEventArgs e)
{
Graphics area = e.Graphics;
if(!Config.FinJuego)
{
//Set snake color
Brush colorVib;
//Snake body colors
for(int i=0; i< Viborita.Count; i++)
{
if (i == 0)
colorVib = Brushes.Black; //Draws the head
else
colorVib = Brushes.OrangeRed; //Draws the rest of the body
//Draws full snake
foreach (char c in nombre)
{
area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
new SolidBrush(Color.Black), Viborita[i].X * Config.Ancho, Viborita[i].Y * Config.Alto);
}
//Draw food
area.FillEllipse(Brushes.Green,
new Rectangle(comida.X * Config.Ancho,
comida.Y * Config.Alto, Config.Ancho, Config.Alto));
}
}
else
{
string finjuego = "Fin del juego.\nTu puntuación final fue: " + Config.Puntuacion +
"\n Presiona la tecla Enter para reintentar.";
if (RecordFinal==0)
{
Record = Config.Puntuacion;
RecordFinal = Record;
}
if(Config.Puntuacion>RecordFinal)
{
RecordFinal = Config.Puntuacion;
}
lbFinJuego.Text = finjuego;
lbFinJuego.Visible = true;
}
}
所以,如您所见,我正在使用 DrawString,"area" 它是一个 PictureBox,"Viborita" 它是项目的名称,所以...有什么想法吗?
很抱歉,如果我不清楚,那是因为我不会说我的母语,如果您对代码中的某些内容有任何疑问,请告诉我,顺便谢谢。
好吧,好像Viborita[i]是第i条蛇的位置。问题是你没有跟踪蛇是如何卷曲的,或者它是什么形状。我建议你创建一个 Snake class 来跟踪蛇头的位置和它的位置其他字符,以及任何其他相关数据。
此外,您每次绘制字符时都在创建新字体和新画笔。最好把你的画笔和字体放在 class 这个所在的字段里。
所以……问题解决了。问题是这样的:
area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
new SolidBrush(Color.Black), Viborita[i].X * Config.Ancho, Viborita[i].Y * Config.Alto);
我没有使用 "Viborita[i].X * Config.Ancho" 和 "Viborita[i].Y * Config.Alto",而是使用了这个:
Ancho = Viborita[i].X * Config.Ancho;
Alto = Viborita[i].Y * Config.Alto;
foreach (char c in nombre)
{
area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular),
new SolidBrush(Color.Black), Ancho, Alto);
Ancho += 14;
}
这解决了我的问题。