drawImage zeichnet nicht immer

ice_thunder

Grünschnabel
Hallöchen,
ich hab ein kleines Problem mit der drawImage Funktion. Hoffe das hier einer bescheid weis, hab schon alles durchsucht aber nichts gefunden. Also zum Problem: Ich schreibe gerade an einer Simulation. In dieser geht es um einen Raum, indem Käse liegt, wenn Mäuse den Käse wittern, gehen sie in den Raum um Käse zu fressen und sobald eine Maus im Raum ist kommt eine Katze hinein um die Mäuse zu jagen. Das hab ich auch alles schon hinbekommen und hab mich jetzt mit der graphischen Ausarbeitung befasst, zuerst hab ich mit den Funktionen drawRect und drawOval gearbeitet bis alles richtig gelaufen ist.(der Käse war ein Viereck und Mäuse und Katzen waren Kreise) Jetzt wollte ich Graphiken einfügen und habe die mit dem Befehl
Image bild = Toolkit.getDefaultToolkit().getImage("url");
geladen. Allerdings werden die Bilder erst gezeichnet, wenn die Objekte anfangen sich zu bewegen. Als allererstes werden die Mäuse, Katzen und der Käse(wenn sie sich noch nicht bewegen) in der Startklasse gezeichnet, aber die Funktion drawImage gibt da immer false zurück, sobald sie dann anfangen sich zu bewegen werden sie sichtbar, aber der Käse der sich nicht bewegt bleibt unsichtbar. In allen Fällen werden die selben Funktionen benutzt und einmal gibt drawImage true zurück und das andere mal nicht.
Ich hoffe ihr habt verstanden wie ich das meine. Danke schon im Voraus für euere antworten.
MFG
Sebastian

p.s.: Hab das Programm noch angehängt
 

Anhänge

  • kum2.zip
    18,2 KB · Aufrufe: 107
Zuletzt bearbeitet:
Moin.
Also nen bischen Code wäre hilfreich.
Zeig mal bitte die Methode wo du die Bilder lädst und die Methode wo du sie zeichnest.

MfG Marcel
 
Ok, Die Bilder lade ich so:

Code:
Image bildK = Toolkit.getDefaultToolkit().getImage("./pics/15.jpg");
Image bildKaese = Toolkit.getDefaultToolkit().getImage(
            "./pics/kaese.jpg");
Image bildM = Toolkit.getDefaultToolkit().getImage(
            "./pics/maus.gif");
und später wird mit dieser Funktion das Bild gezeichnet
Code:
 public void malKatze(int X, int Y)
    {
        Graphics g = pan.getGraphics();
        g.drawImage(bildK, X, Y, this);
    }
Der Befehl wird jedesmal mit raum.malKatze(); aufgerufen. Am Anfang malt er es nicht erst wenn sich das Objekt bewegt, wenn ich allerdings das drawImage mit drawRect ersetze funktioniert es immer, also kann es eigentlich nur an der drawImage Funktion liegen, aber ich weis nicht wieso die es einmal so macht und das anderemal anders.
MFG
Sebastian

p.s. Hab das Programm gerade noch Oben angehängt, wer Lust und Zeit hat kann sichs ja mal anschauen, Danke
 
Zuletzt bearbeitet:
Das habe ich aus der Java SE 5.0 API zur drawImage Methode.
If the image has completely loaded and its pixels are no longer being changed, then drawImage returns true. Otherwise, drawImage returns false and as more of the image becomes available or it is time to draw another frame of animation, the process that loads the image notifies the specified image observer.

Wie es scheint sind beim ersten Mal Zeichnen deine Bilder noch nicht geladen.

Entweder lädst du die Bilder erstmal im Konstruktor und baust dir danach nen Sleep ein bevor du das erste Mal was zeichnest, oder du nimmst nen MediaTracker den ich eher verwenden würde.
API steht auch nen gutes Beispiel zum MediaTracker.

MfG Marcel
 
Danke für die schnelle antwort, damit kann ich schonmal was anfangen, werds gleich heute abend ausprobieren und mich dann nochmal melden und sagen obs geklappt hab.Bis dann
MfG
Sebastian
 
So habs mit einem Mediatracker gemacht und es funktioniert jetzt. Danke nochmals für die nette und unkomlizierte Hilfe. Echt Super.
MfG
Sebastian
 
Zurück