Hallo,
Ich habe ein simples SpaceInvanders programmiert. Allerdings hat dies bisher nur ein Level bzw. garkeine Levels.
Ich möchte es nun so machen, dass wenn man z.b. 10 Gegner abgeschossen hat, soll für z.b. 3 Sekunden auf dem Panel "Level 2" ausgegeben werden, und dann soll eben Level 2 beginnen.
Die 3 Sekunden wollte ich mit System.currentTimeMillis()+3000 lösen. Funktioniert aber leider nicht.
Sobald ich 10 Treffer habe, friert das aktuelle Bild für 3 Sekunden ein und danach ist das Panel dann leer und es passiert nichts. ???:L
Eigentlich sollte ja aber nach dem 10. Treffer direkt für 3 Sekunden "Level 2" ausgegeben werden auf dem Panel und nach 3 Sekunden sollte das Panel dann leer sein....
Ich habe hier nur mal den Code der paintComponent eingefügt.
Sobald 10 Treffer erreicht sind, wird level1=false und level2=true und check=true gesetzt.
Wenn ich es allerdings so mache, dann funktioniert es einwandfrrei ("Level 2" wird dann eben die ganze Zeit angezeigt). Der Fehler muss also denke ich irgendwo bei System.currentTimeMillis() liegen...
Ich habe ein simples SpaceInvanders programmiert. Allerdings hat dies bisher nur ein Level bzw. garkeine Levels.
Ich möchte es nun so machen, dass wenn man z.b. 10 Gegner abgeschossen hat, soll für z.b. 3 Sekunden auf dem Panel "Level 2" ausgegeben werden, und dann soll eben Level 2 beginnen.
Die 3 Sekunden wollte ich mit System.currentTimeMillis()+3000 lösen. Funktioniert aber leider nicht.
Sobald ich 10 Treffer habe, friert das aktuelle Bild für 3 Sekunden ein und danach ist das Panel dann leer und es passiert nichts. ???:L
Eigentlich sollte ja aber nach dem 10. Treffer direkt für 3 Sekunden "Level 2" ausgegeben werden auf dem Panel und nach 3 Sekunden sollte das Panel dann leer sein....
Ich habe hier nur mal den Code der paintComponent eingefügt.
Sobald 10 Treffer erreicht sind, wird level1=false und level2=true und check=true gesetzt.
Java:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
//Level 1
if(level1==true) {
g2.setColor(Color.BLACK);
//Raumschiff zeichnen
g2.fillRect(x, y, 30, 30);
//Rechte Wand zeichnen
g2.fillRect(500, 0, 10, 468);
//Infos zeichnen
g2.drawString("Anzahl Schüsse: "+anzahlSchuesse, 520, 50);
g2.drawString("Anzahl Treffer: "+anzahlTreffer, 520, 100);
g2.drawString("Anzahl nicht getroffen: "+anzahlNichtGetroffen, 520, 150);
//Laser zeichnen
for (Line2D laser: laserListe) {
g2.draw(laser);
}
//Gegner zeichnen, nur wenn sie nicht getroffen, sprich x!=999 ist
for (Rectangle gegner: gegnerListe) {
if(!(gegner.getX()==999))
g2.draw(gegner);
}
}
// Level 2
if(level2==true) {
long levelEnde = System.currentTimeMillis()+3000;
while((System.currentTimeMillis() < levelEnde) && (check==true)) {
g2.drawString("Level 2", 300, 200);
}check=false;
}
//Timer starten
t.start();
}
Wenn ich es allerdings so mache, dann funktioniert es einwandfrrei ("Level 2" wird dann eben die ganze Zeit angezeigt). Der Fehler muss also denke ich irgendwo bei System.currentTimeMillis() liegen...
Java:
// Level 2
if(level2==true) {
g2.drawString("Level 2", 300, 200);
}