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();
}
}
}