Prosta animacja z zastosowaniem wątków

Odpowiedz Nowy wątek
2006-12-25 23:12
Renox
0

Witam, jestem początkującym w tej dziedzinie dlatego proszę o pomoc - nie wiem co zrobić, aby nasrysowany prostokąt przesuwał się o 1 piksel co 1 sekundę. Z góry bardzo dziękuję, proszę o szybką odpowiedź i oczywiście życzę wesołych świąt. Oto trochę pokręcony kod, który jak dotąd wyprodukowałem:

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

class Timer extends Thread{
    Timer (){}
    public void run() {
       int time=0;
       Animacje anim = new Animacje();
       while (true) {
           try{this.sleep(1000);} catch (InterruptedException exc){return;}
           time++;
           anim.przepisz(time);
       //System.out.println(time);
       anim.repaint();
       }
    }
}

public class Obrazpr2 extends Frame {

public static void main (String [] args) {

    Frame okno = new Frame("Okno");
    okno.add( new Animacje() );

    okno.setSize(800,800);
    okno.setVisible(true);

    Timer tm = new Timer();
    tm.start();

okno.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("Koniec programu");
System.exit(0);
}
});
okno.setVisible(true);
}
}

class Animacje extends Canvas {
public int i;
public void przepisz(int j) {
i=j;
}

public void paint(Graphics g) {
   g.setColor(Color.black);
   g.drawRect(200+i*10,400,25,5);
 }
}

Pozostało 580 znaków

2006-12-26 00:14
0

Teraz zadaj sobie pytanie: Co ma wspolnego obiekt anim z watku z obiektem typu Animacje z obiektu okna?


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-12-26 13:50
tormentor
0

Johny ma racje: dodaj po prostu ten utworzony obiekt anim do okna bo on nie ma gdzie(na czym) tego rysowac reszta wygląda w porządku [browar]

Pozostało 580 znaków

2006-12-26 14:37
Renox
0

Dzięki Wam bardzo za podpowiedzi, ale nadal nie działa mi tak jak chcę. Na pewno źle go dodaję, słabo jeszcze się na tym znam. Moglibyście zmienić mój kod tak aby to działało, byłbym bardzo wdzięczny.
Pozdrawiam.

Pozostało 580 znaków

2006-12-26 16:07
tormentor
0

ok poprawie ci to ale byc moze wieczorem sie pojawi bo nie wiem czy bede mial teraz czas

Pozostało 580 znaków

2006-12-26 16:09
0

Musisz po prostu uzyc tego samego obiektu, najlepiej przekazac do watku jako parametr.


//main
    Animacje anim = new Animacje();
    okno.add( anim );

    okno.setSize(800,800);
    okno.setVisible(true);

    Timer tm = new Timer(anim);
    tm.start();
//...

class Timer extends Thread{
    private Animacje anim;
    Timer (Animacje anim)
    {
      this.anim = anim;
    }
    public void run() {
       int time=0;
       while (true) {
           try{this.sleep(1000);} catch (InterruptedException exc){return;}
           time++;
           anim.przepisz(time);
           //System.out.println(time);
           anim.repaint();
       }
    }
}

You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-12-26 16:48
Renox
0

Jeszcze raz bardzo dziękuję za pomoc i za chęci.
Już wszystko dobrze działa.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0