Hallihallo, ich habe nun unter anderem mithilfe eines bufferedimages ein 4gewinnt-spiel programmiert.
Ich war echt stolz darauf, da es richtig objektorientiert geschrieben is, doch dann kam heute bei der verfeinerung der darstellung ein echt nerviger bug auf. Im unten stehenden Codeschnippsel ist zu erkennen, dass die paintslide()-methode zum beispiel die methode Gitter.zeichnen() aufruft. Der bug bei der ausführung des programms ist, dass zwar die einzelnen bilder bei dem ersten "animations-frame" in der richtigen reihenfolge aufeinander gelegt werden, jedoch lädt zuallererst der rahmen des Gitters, dann mit einigem abstand das gitter selbst, und dann die übrigen bilder. Das ist natürlich nicht so tragisch, wenn ich das alles schnell ablaufen lasse, doch es bleibt immer ein kurzes aufblitzen des hintergrunds beim starten des programms.
Kurz gefragt, warum werden die einzelnen komponenten nicht in der angegebenen reihenfolge gezeichnet??? Was kann ich tun, um diesen unwichtigen Schönheitsfehler dennoch zu beheben?
Mit repaint() wird das bufferedimage immer neugezeichnet. der fehler tritt wie gesagt nur beim start der animation auf, und das nur für einen "Tic".
Ich war echt stolz darauf, da es richtig objektorientiert geschrieben is, doch dann kam heute bei der verfeinerung der darstellung ein echt nerviger bug auf. Im unten stehenden Codeschnippsel ist zu erkennen, dass die paintslide()-methode zum beispiel die methode Gitter.zeichnen() aufruft. Der bug bei der ausführung des programms ist, dass zwar die einzelnen bilder bei dem ersten "animations-frame" in der richtigen reihenfolge aufeinander gelegt werden, jedoch lädt zuallererst der rahmen des Gitters, dann mit einigem abstand das gitter selbst, und dann die übrigen bilder. Das ist natürlich nicht so tragisch, wenn ich das alles schnell ablaufen lasse, doch es bleibt immer ein kurzes aufblitzen des hintergrunds beim starten des programms.
Kurz gefragt, warum werden die einzelnen komponenten nicht in der angegebenen reihenfolge gezeichnet??? Was kann ich tun, um diesen unwichtigen Schönheitsfehler dennoch zu beheben?
Java:
klasse Spielerwahlpanel:
...
public static void paintslide2(Graphics g)
{
g.drawImage(bgingame, 0, 0, 800, 600, null);
Gitter.zeichneGitter(g, 280, 100);
g.drawImage(backgroundleft, e, 0, 400, 600, null);
g.drawImage(backgroundright, h, 0, 400, 600, null);
Bild.bildzeichnen(g, e+150, 250, array1stelle);
Bild.bildzeichnen(g, h+150, 250, array2stelle);
}
...
Java:
klasse Gitter:
...
public static void zeichneGitter(Graphics g, int abstandx, int abstandy)
{ //hier das zeichnen des gitters durch zusammenfügen von bildern
for(int i=0; i<gitterhoehe; i++){
for(int j=0; j<gitterbreite; j++){
g.drawImage(kasten, abstandx+j*breite, abstandy+i*breite, breite, breite, null);
}
}
//nachfolgend der rahmen
g.setColor(Color.decode("666666"));
g.fillRect(abstandx-dicke, abstandy-dicke, gitterbreite*breite+2*dicke, dicke);
g.fillRect(abstandx-dicke, abstandy+gitterhoehe*breite, gitterbreite*breite+2*dicke, dicke);
g.fillRect(abstandx-dicke, abstandy-dicke, dicke, gitterhoehe*breite+2*dicke);
g.fillRect(abstandx+gitterbreite*breite, abstandy-dicke, dicke, gitterhoehe*breite+2*dicke);
}
Mit repaint() wird das bufferedimage immer neugezeichnet. der fehler tritt wie gesagt nur beim start der animation auf, und das nur für einen "Tic".