3 svar
195 visningar
shemeren 35
Postad: 15 maj 2021 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 Online 30472
Postad: 15 maj 2021 22:14

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

shemeren 35
Postad: 15 maj 2021 22:45

inget förändras

SeriousCephalopod 2696
Postad: 15 maj 2021 22:58 Redigerad: 15 maj 2021 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
Close