Paint() und ist zu langsam

BabyMitSchnully

Erfahrenes Mitglied
Hi leute,

ich habe ein Problem. Ich möchte folgendes machen.

Eine Animation aus 15 verschiedenen einzelbildern soll gerendert werden.

in der paintComponent methode des Zeichenbretts wird folgendes aufgerufen.

g = graphics...
Code:
g.drawImage(hintergrundbild.....);//Das ist defenitiv das größte
this.meineKlasse.renderAnimation(g);


//in renderAnimation wird jedesmal der nächste Frame gezeichnet

Außerhalb der Paintmethode wird der Aufruf für die Paintmethode gemacht. Und zwar so

Code:
this.animation.nextFrame();
this.repaint();
this.setDelay(2000); //Eigene Methode, die über eine Schleife so lange zögert bis zeit in Millisekunden überschritten ist.

this.animation.nextFrame()
this.repaint();
this.setDelay(2000)

.
.
.

//Das 15 mal,  bis alle Bilder gezeigt wurden.

Mein Problem ist, dass der Quellcode innerhalb der PaintMethode nicht komplett ausgeführt wird. Whärend alle 15 repaint aufrufe gemacht werden, werden beim ersten mal vielleicht 3 in der paint() gemacht. Beim zweiten mal werden schon 8 gemacht und beim 3 mal klappt es dann. Wie auch bei den folgenden Malen.

Meine Vermutung, dass das mit einem Thread zusammen hängt, der innerhalb von Paint läuft. Wenn ja, wie kann ich das Problem umgehen?
 
O.k.

nach langem hin und her habe ich die Lösung gefunden. Wenn jemand das gleiche Problem hat wie ich, dann liegt es daran, dass die Bilder zu anfang nicht vollständig geladen werden.

Trotz DoubleBuffer flackerten meine Bilder zu anfang immer noch ein wenig. Je länger ich das Spiel gespielt habe, desto weniger flackerte es.

Wenn ihr die Bilder am Anfang mit dem Toolkit ladet, dann macht einfach eine Schleife, die so lange läuft, bis das aktuelle Bild geladen wird. Hier ein Beispiel

Code:
Image img = Toolkit.getDefaultToolkit().getImage(pathname)  //Wahrscheinlich ein eigener Thread deswegen das Problem.


//if (img == null) funktioniert nicht, da der Pointer schon gesetzt wurde.

while (img.getWidth(null) < 0)
{
  //So lange warten, bis Bild vollständig geladen wurde.
}

So funktioniert es ohne Probleme.
 
Zuletzt bearbeitet:
Zurück