Måltavla programmering
Hej, jag har gjort en måltavla med ett sikte, se bilden nedan.
När man vänsterklickar så visas träffen med ett kryss. Problemet jag har är att jag vill inte att förgående träff ska försvinna när jag klickar en gång till. Jag vill kunna klicka 5 gånger innan metoden för att rita träffen avslutas.
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
if (träff != null)
{
träff.pilTräff(g);
}
}
public void pilTräff(Graphics g)
{
g.DrawLine(new Pen(Color.Brown), x, y, x + 10, y + 10);
g.DrawLine(new Pen(Color.Brown), x, y + 10, x + 10, y);
}
protected override void OnMouseUp(MouseEventArgs e)
{
if (antalKlick >= 5) return;
else
{
träff = new Träff(e.X, e.Y);
Invalidate();
antalKlick++;
}
}
Jag har olika klasser, men jag tror att det är denna kod som är lämplig här.
Vad händer om du inte gör Invalidate()?
inget förändras
Beror på hur du har kodat uppritningen.
Om nu allt uppdateras när du klickar igen låter det som att allt, inklusive bakgrund ritas om vid klick.
Då är nog enklaste modden att ha en lista/kö där du lagrar musklicken och sedan ersätter raden som ritar upp ett musklick med en forloop som ritar upp kryssen motsvarande de senaste träffarna som lagts till i listan.
Du kan också radera raden som rensar och ritar om bakgrunden så att du bara ritar ovanpå bakgrunden i lager på lager men då kan du inte ha att klicken som är äldre än 5 klick försvinner.