Wir sollen in der Schule ein Applet erstellen, auf dem Straßen (Kurven, Kreuzungen, Geraden) sind und auf denen Autos fahren.
Nun komme ich einfach nicht weiter. Mein Problem sind die Autos, die gleichzeitig auf der Straße fahren sollen:
Möglichkeit 1 um die Autos fahren zu lassen (Auszug):
Vorteil: Nur das Auto (Rechteck) wird aktuallisiert, der Rest des Applets bleibt so wie es ist
Nachteil: Das Programm sitzt während des zeichnens des Autos in einer Endlosschleife und man kann das Applet nicht so einfach beenden oder andere Prozesse gleichzeitig starten.
Also habe ich nach einer weiteren Möglichkeit gesucht, um mehrere Prozesse gleichzeitig abarbeiten zu können:
Möglichkeit 2 (Auszug):
(Das Flackern der einzelnen Frames könnte man noch mit einem DoubleBuffer entfernen)
Voreil: Mehrere Prozesse können gleichzeitig laufen.
Nun zu meiner Frage: Ich würde gerne bei Möglichkeit 2 statt dem ganzen Applet nur meine Autos (Rechtecke) zeichnen.
Ich habe mal die Klasse "Auto" so aufgebaut:
Will aber nicht laufen (Eine Methode in einer anderen Methode geht ja nicht). Würde das aber gerne in der Form haben wollen, weil ich nicht alles neu painten will, sondern nur die Autos!
Hat da jemand eine Idee?
Nun komme ich einfach nicht weiter. Mein Problem sind die Autos, die gleichzeitig auf der Straße fahren sollen:
Möglichkeit 1 um die Autos fahren zu lassen (Auszug):
Code:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
public class Kreuzung extends Applet {
public void init() {
setLayout(null);
setSize(600, 600);
setBackground(Color.lightGray);
}
public void paint(Graphics stift) {
while (true) {
try {
for (int i = 0; i <= 600; i++) {
stift.setColor(Color.red);
stift.fillRect(i, 315, 150, 100);
stift.setColor(Color.lightGray);
stift.fillRect(i, 315, 1, 100);
Thread.sleep(5);
}
break;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Vorteil: Nur das Auto (Rechteck) wird aktuallisiert, der Rest des Applets bleibt so wie es ist
Nachteil: Das Programm sitzt während des zeichnens des Autos in einer Endlosschleife und man kann das Applet nicht so einfach beenden oder andere Prozesse gleichzeitig starten.
Also habe ich nach einer weiteren Möglichkeit gesucht, um mehrere Prozesse gleichzeitig abarbeiten zu können:
Möglichkeit 2 (Auszug):
Code:
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
public class Kreuzung extends Applet {
int i = 0;
public void init() {
setLayout(null);
setSize(600, 600);
setBackground(Color.lightGray);
Thread t1 = new Thread(new Auto());
t1.start();
}
class Auto implements Runnable {
public void run() {
while (true) {
repaint();
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public void paint(Graphics stift) {
stift.setColor(Farben.rot);
stift.fillRect(i++, 315, 150, 100);
}
}
Voreil: Mehrere Prozesse können gleichzeitig laufen.
Nun zu meiner Frage: Ich würde gerne bei Möglichkeit 2 statt dem ganzen Applet nur meine Autos (Rechtecke) zeichnen.
Ich habe mal die Klasse "Auto" so aufgebaut:
Code:
class Auto implements Runnable {
public void run() {
public void paint(Graphics stift){
while (true) {
stift.setColor(Color.red);
stift.fillRect(i++, 315, 150, 100);
}
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Hat da jemand eine Idee?