Avatar billede vis_dk Nybegynder
29. august 2004 - 16:58 Der er 5 kommentarer og
1 løsning

Vente på at repaint bliver færdig.

Hej,

Jeg ønsker at tegne en figur der flytter sig. For at figureren ikke øjeblikkeligt flytter fra start til slut, bruger jeg Thread.sleep() metoden. Mit problem er at sleep metoden (åbentbart) også bremser repaint'ingen af billedet, og derfor sker der stadig ingen opdatering af billedet imellem start og slut.

Mit spørgsmål er så om der ikke findes en måde at få programmet til at vente på at repaint er færdig og så gå videre med udførelsen.
Avatar billede dark-devil Nybegynder
29. august 2004 - 17:00 #1
Igang med en 3Dchat? :)
Avatar billede vis_dk Nybegynder
29. august 2004 - 17:05 #2
Hehe nej, et mindre computerspil.
Avatar billede Slettet bruger
30. august 2004 - 20:51 #3
Jeg vil gribe det at lave en animation an på en anden måde. Du skal sørge for at din frame bliver opdateret (kalder repaint()) hvert XX-antal ms. (hver 30 ms giver 33 frames/second, som er normalen). Så skal du blot lave en anden tråd til at flytte koordinaterne på den figur (det stykke grafik) som skal flyttes / animeres.

Giver det nogen mening?

Du må under alle omstændigheder ikke sætte en Thread.sleep(XXXX) ind i din repaint-metode, den skal kunne afvikles på meget få brøkdele af et sekund.
Avatar billede vis_dk Nybegynder
30. august 2004 - 21:30 #4
Jeg har gjort som du foreslår, og det virker som den rigtige måde at gøre det på.

Updateringen af billedet går fint igang og dens tråd kører. Men når jeg så trykker med musen for at flytte min figur så er det som om den tråd har højere prioritet, den pauser nemlig repaint tråden og udfører sig så derefter, hvorefter repaint tråden går igang igen.

Jeg har en System.out i repaint metoden og en i MouseListeneren. Outputtet så ca. således ud:

repaint
repaint
repaint
repaint
              (Der trykkes med musen)
mouselistener
mouselistener
mouselistener
mouselistener
              (Mouselisteren bliver færdig)
repaint
repaint
repaint
repaint


Det ville være perfekt hvis man kunne få den til at udføre de to tråde så de skiftedes, ala:

repaint
mouselistener
repaint
mouselistener
repaint
mouselistener
repaint
mouselistener
repaint
Avatar billede vis_dk Nybegynder
30. august 2004 - 21:42 #5
Nå, jeg fandt ud af det. Det var fordi at jeg kørte mouselistener delen i hovedtråden, hvis det bliver lagt ind i en seperat tråd som repaint delen skiftes de pænt ad

Smid et svar corholio så får du de 60 point
Avatar billede Slettet bruger
30. august 2004 - 21:44 #6
ok, takker :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester