Parashurama Skrevet 20. april 2010 Del Skrevet 20. april 2010 Hei. Har laget en kode hvor en sirkel spretter rundt innenfor en ramme, men jeg får ikke sletta forrige sirkel for hver gang jeg tegner en ny så det ser bare ut som en slange til slutt. Noen som kan hjelpe meg? Trodde repaint() var løsningen men fikk det ikke til å virke. Her er koden: import java.awt.*; import java.applet.*; public class rect extends Applet { boolean run = true; int x1 = 50; int y1 = 150; int xspeed = 2; int yspeed = 1; public void paint (Graphics g) { g.setColor(Color.black); g.drawRect(0,0,599,599); do { g.setColor(Color.blue); g.fillOval(x1,y1,60,60); x1 = x1 + xspeed; y1 = y1 + yspeed; if (x1 > 538) { xspeed = -xspeed; } if (y1 > 538) { yspeed = -yspeed; } if (x1 < 1) { xspeed = -xspeed; } if (y1 < 1) { yspeed = -yspeed; } try {Thread.sleep(10);} catch (InterruptedException e){} } while (run=true); g.setColor(Color.pink); g.fillOval(150,150,60,60); } } Lenke til kommentar
MailMan13 Skrevet 20. april 2010 Del Skrevet 20. april 2010 g.drawRect(...) tegner bare et tomt rektangel. g.fillRect vil gjøre det du prøver på, og fylle hele firkanten med valgt farge. Lenke til kommentar
Parashurama Skrevet 20. april 2010 Forfatter Del Skrevet 20. april 2010 g.drawRect er kun rammen rundt. Det er g.fillOval som "flytter" på seg. Det jeg lurer på er hvordan jeg sletter en sirkel før den tegner en ny? Eller sletter alt som er tegnet i det heletatt, slik at for hver do-loop så tegnes ikke ovalen over den forrige. Lenke til kommentar
MailMan13 Skrevet 20. april 2010 Del Skrevet 20. april 2010 (endret) Med SWING vil ingenting overskrives uten at du skriver over det selv. Det kan være du finner gamle eksempler som bruker AWT som gjør det (mde AWT ble det blanket for hver paint). Det har med ytelse å gjøre, slik at du ikke kaster bort kjøretid på å skrive "ingenting" til hele skjermen på hvert bilde hvis du ikke trenger det. Enten sletter du hele skjermen med fillRect, men det er mest elegant hvis du klarer å blanke ut kun det du trenger uten å bruke for mye maskinressurser på det (f.eks ved å skrive en sort "fillOval" over den gamle før du tegner den nye, eller finne bounding rectangle rundt det som skal tegnes på nytt og ta en fillRect rundt det, avhengig av hva som kjører raskest). Endret 20. april 2010 av MailMan13 Lenke til kommentar
LostOblivion Skrevet 26. april 2010 Del Skrevet 26. april 2010 Nederst i while-loopen din sjekker du ikke om run er true, run == true, men du setter run til true, run = true, noe som vil skape problemer for deg når du skal ut av loopen. Det funker kun fordi uttrykket (run=true) evaluerer til true. Ville bare brukt while(run) { ... } her, blir mer oversiktlig. Lenke til kommentar
GeirGrusom Skrevet 27. april 2010 Del Skrevet 27. april 2010 Nederst i while-loopen din sjekker du ikke om run er true, run == true, men du setter run til true, run = true, noe som vil skape problemer for deg når du skal ut av loopen. Det funker kun fordi uttrykket (run=true) evaluerer til true. Ville bare brukt while(run) { ... } her, blir mer oversiktlig. Jeg vil si meg enig: aldri sjekk om en bool er true eller false med == det er fullstendig unødvendig, og fører bare til feil som dette. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå