Имам чувството, че съм преровил интернет за отговор, но все още не съм решил този проблем. Създавам игра на палач в 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);
}
}