Мне кажется, я поискал в Интернете ответ, но до сих пор не решил эту проблему. Я создаю игру «Палач» на C # (с которой я еще новичок), и у меня есть групповой блок в моей форме, где я рисую различные «части тела». Проблема в том, что он перерисовывается каждый раз при вызове события рисования. Так что у меня будет голова, потом просто рука, нога и т. Д.
Я пробовал делать такие вещи, как переопределение OnPaintBackground, и хотя это решает проблему с перерисовкой, это портит всю форму, и когда я это делаю, это выглядит ужасно. Я также пытался рисовать на панели вместо группового ящика, но по какой-то причине у меня не получалось даже рисовать.
Может ли кто-нибудь предложить какие-либо предложения? Между прочим, это НЕ домашнее задание, а просто личный проект и опыт обучения.
Некоторый код: это то, что я использую для запуска функции рисования (она запускается при других условиях, которые у меня есть)
this.groupBoxHang.Paint += new System.Windows.Forms.PaintEventHandler(this.groupBoxHangMan_Paint);
Затем он доходит до этого и вызывает фактическую функцию, которая находится в отдельном классе.
private void groupBoxHangMan_Paint(object sender, PaintEventArgs e)
{
draw.DrawHangMan(e.Graphics, GetRemainingGuess());
}
Вот часть другого класса:
public void DrawHangMan(Graphics dM, int guessesRemaining)
{
Pen blackPen = new Pen(Brushes.Black);
Pen deathPen = new Pen(Brushes.Red);
deathPen.Width = 2.0F;
if (guessesRemaining == 7)
{
dM.DrawEllipse(blackPen, 94, 75, 60, 60);//head
}
else if (guessesRemaining == 6)
{
dM.DrawLine(blackPen, 124, 210, 124, 135);//body
}
else if (guessesRemaining == 5)
{
dM.DrawLine(blackPen, 123, 170, 65, 145);//left arm
}
else if (guessesRemaining == 4)
{
dM.DrawLine(blackPen, 123, 170, 181, 145); //right arm
}
else if (guessesRemaining == 3)
{
dM.DrawLine(blackPen, 123, 210, 65, 255);//left leg
}
else if (guessesRemaining == 2)
{
dM.DrawLine(blackPen, 123, 210, 181, 255);//right leg
}
else if (guessesRemaining == 1)
{
dM.DrawEllipse(blackPen, 105, 93, 10, 10); //left open eye
dM.DrawEllipse(blackPen, 133, 93, 10, 10); //right open eye
}
else if (guessesRemaining == 0)
{
dM.DrawLine(deathPen, 102, 104, 118, 92);//left eye dead
dM.DrawLine(deathPen, 118, 104, 102, 92);
dM.DrawLine(deathPen, 130, 104, 146, 92);//right dead eye
dM.DrawLine(deathPen, 146, 104, 130, 92);
}
}