Avatar billede nih Novice
07. november 2002 - 22:36 Der er 8 kommentarer og
1 løsning

Animering

Hej
Jeg har lavet en lille algoritme (Tårnene i Hanoi) - Det er OK.
Nu ville jeg lave en GUI, så man kunne se brikkerne bevæge sig - Det har jeg også fundet ud af. Det går bare for stærkt :(.

Hvordan stopper jeg koden et par sek og gentegner mit JPanel - har prøvet med Threads, men det virker ikke :(

Niels
Avatar billede arne_v Ekspert
07. november 2002 - 22:38 #1
Thread.sleep(2000) bør vente 2 sekunder !
Avatar billede nih Novice
07. november 2002 - 22:41 #2
Hvordan skal jeg implementere det ?

class MitPanel extends JPanel implements Runnable{
    int pindA, pindB, pindC;
    SpilleBrik brikker[];
    int antal;
    public run(){
   
    }
..........osv.....

hvad skal jeg skrive i run ???
Avatar billede nih Novice
07. november 2002 - 22:48 #3
Min kode 'sover', den tager i hvertfald længere tid, men den tegner ikke noget.
Avatar billede nih Novice
07. november 2002 - 22:48 #4
Denne metode bliver kaldt fra et loop:

public void flytBrik(char fraPind, char tilPind, int brikID){
        if (fraPind == 'A') pindA--;
        if (fraPind == 'B') pindB--;
        if (fraPind == 'C') pindC--;
       
        if (tilPind == 'A'){
            pindA++;
            brikker[brikID-1].setX(57);
            brikker[brikID-1].setY(pindA);
        }
        if (tilPind == 'B'){
            pindB++;
            brikker[brikID-1].setX(162);
            brikker[brikID-1].setY(pindB);
        }
        if (tilPind == 'C'){
            pindC++;
            brikker[brikID-1].setX(262);
            brikker[brikID-1].setY(pindC);
        }
        try{
        Thread.sleep(200) ;
        }catch(InterruptedException e){}
        repaint();
    }
Avatar billede arne_v Ekspert
07. november 2002 - 23:10 #5
Umiddelbart ser det OK ud for mig.

Du venter 0.2 sekunder og kalder repaint, som
jeg formoder repainter det der er på skærmen.
Avatar billede nih Novice
07. november 2002 - 23:16 #6
Jeg er ret ny i java - havd bruger man run(){} til ??

Når jeg kører min løkke og kalder metoden flytBrik 37 gange sker der intet i 37 * 0,2 = ca. 4 sek - hvorefter alle brikker på een gang er flyttet over ????

Niels
Avatar billede arne_v Ekspert
07. november 2002 - 23:19 #7
Du implementerer Runnable og har en run method.

Det er noget man bruger, når man starter en thread.
Avatar billede arne_v Ekspert
07. november 2002 - 23:20 #8
At alle brikkerne bliver flyttet over på en
gang tyder på, at din repaint ikke får
repaintet.

Jeg er desværre ikke nogen ørn til GUI, så
det kan jeg ikke hjælpe dig med.

Men jeg ved at der er andre her som kan.
Avatar billede nih Novice
24. november 2002 - 21:37 #9
Hej Arne
Tak for opmærksomheden vedr. mit problem, det er nu løst således

    public void actionPerformed(ActionEvent e){
       
        Thread runner = new Thread()
        {
                    public void run(){
                        spilePlade.flytSkive(ANTALSKIVER , 'A' , 'C' , 'B');
                        txt1.setText(spilePlade.getResultat());
                    }
        };
        runner.start();     
    }

Det kaldes en 'indre tråd'

Niels
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