3 svar
40 visningar
shemeren 41
Postad: 15 maj 21:35

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.

Laguna 15040
Postad: 15 maj 22:14

Vad händer om du inte gör Invalidate()? 

shemeren 41
Postad: 15 maj 22:45

inget förändras

SeriousCephalopod 2172
Postad: 15 maj 22:58 Redigerad: 15 maj 23:00

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.

Svara Avbryt
Close