Witam wszystkich,

Zaczynam dopiero moją przygodę z javą. Chciałbym napisać program z prostą animacją opartą na wątkach, w których przesuwają się prostokąty. Jak na razie udało mi się zrobić przesuwający się prostokąt. Teraz próbuję zrobić, aby po oknie przesuwały się prostokąty o różnej wysokości i długości (postawione na dole okna) jeden za drugim z możliwością zmiany ich prędkości ruchu wszystkich.

Byłbym bardzo wdzięczny za wszelką pomoc / podpowiedzi.

Załączam kod:

import java.awt.*;

@SuppressWarnings("serial")
public class OknoGry extends Canvas implements Runnable{
	
	
	private int x = 0;
	
	private int szer = 0;
	
	private int x2;
	private int y1;
	
	Image offscr = null;
        Graphics offscrgr = null;
	
        public OknoGry(int szer, int x2,int y1){
    	this.szer = szer;
    	
    	this.x2 = x2;
    	this.y1 = y1;
    	
    }
    
	public Dimension getPreferredSize() {
		return new Dimension(szer,szer);
	}
	
	
	public void update(Graphics g) {
		paint(g);
	}
	
	public void paint(Graphics g) {
		g.drawImage(offscr, 0, 0, this);
	}
	
	public void addNotify() {
		super.addNotify();
		offscr = createImage(getPreferredSize().width << 2 , getPreferredSize().height << 2);
		offscrgr = offscr.getGraphics();
	}
	
	void modifyLocation() { 
		if (x-- < -getPreferredSize().width) {
	          x = getSize().width; 
			}
	}

	void updateOffscreen(int x2, int y1) {
	
		offscrgr.clearRect(0, 0, offscr.getWidth(this) <<2 , offscr.getHeight(this) <<2);
		offscrgr.setColor(Color.black);
		offscrgr.fillRect(x, /*250, 200,*/y1,x2, offscr.getHeight(this) << 2); 
	}
	
	 void sleep() {
	        try {
	            Thread.sleep(15);
	        } catch (InterruptedException ie) {
	        }
	    }

	    public void run() {
	        while (true) {
	            updateOffscreen(x2,y1);
	            repaint();
	            modifyLocation();
	            
	            sleep();
	        }
	    }
	 
	    public void updateOffscrSize() {
	        System.out.println(getWidth() + " " + getHeight());  
	        offscr = createImage(getWidth() << 2 , getHeight() << 2);
	        offscrgr = offscr.getGraphics();
	    } 
}

import java.awt.*;
import java.awt.event.*;

public class Gra {
	
	public static void main(String[] args) {
	        final OknoGry[] o = {new OknoGry(400,200,250), new OknoGry(400,350,300)};
		Frame f = new Frame("okno");
		f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
		for (int i = 0; i < o.length; i++){
			oknoGry.add(o[i], BorderLayout.CENTER);
		}
		f.pack();
		f.setVisible(true);
		for(int i = 0; i<o.length; i++){
			new Thread(o[i]).start();
		}
    }
		
}