Hallo Leute,
ich bin gerade dabei ein kleines Spiel zu programmieren. Ich habe eine Klasse "Boot", welche durch die Mainmethode aufgerufen wird. Diese erzeugt ein Frame, dem dann ein Gamepanel hinzugefügt wird. Dieses Gamepanel ist ebenfalls eine eigene Klasse und in ihrem Konstruktor möchte ich einer Klassenvariable vom Typ BufferedImage ein .png Bild aus dem Package res zuweisen. Dieses wird in der paintComponent-Methode gezeichnet. Als Test ob überhaupt etwas gezeichnet wird habe ich einfach irgendein Sys.out in paintComponent verwendet. Leider läuft die paintComponent-Methode überhaupt nicht, wenn ich versuche ein Bild im Konstruktor zu laden, selbst wenn g.drawImage(background1 ...) auskommentiert ist. Wenn ich das Fenster mit der Maus etwas nach links ziehe, fängt es plötzlich an zu zeichnen. Kann mir wer erklären wieso? Meine Vermutung wäre ja, dass der Konstrukter "zu lange dauert", da ich bereits Thread.sleep verwendet habe und aufs gleiche Ergebnis gekommen bin.
Edit: Ich sollte noch erwähnen, dass der Hintergrund nie gezeichnet wird, auch wenn ich das Fenster verschiebe und somit das Rechteck erscheint.
MfG
Luuschi
ich bin gerade dabei ein kleines Spiel zu programmieren. Ich habe eine Klasse "Boot", welche durch die Mainmethode aufgerufen wird. Diese erzeugt ein Frame, dem dann ein Gamepanel hinzugefügt wird. Dieses Gamepanel ist ebenfalls eine eigene Klasse und in ihrem Konstruktor möchte ich einer Klassenvariable vom Typ BufferedImage ein .png Bild aus dem Package res zuweisen. Dieses wird in der paintComponent-Methode gezeichnet. Als Test ob überhaupt etwas gezeichnet wird habe ich einfach irgendein Sys.out in paintComponent verwendet. Leider läuft die paintComponent-Methode überhaupt nicht, wenn ich versuche ein Bild im Konstruktor zu laden, selbst wenn g.drawImage(background1 ...) auskommentiert ist. Wenn ich das Fenster mit der Maus etwas nach links ziehe, fängt es plötzlich an zu zeichnen. Kann mir wer erklären wieso? Meine Vermutung wäre ja, dass der Konstrukter "zu lange dauert", da ich bereits Thread.sleep verwendet habe und aufs gleiche Ergebnis gekommen bin.
Edit: Ich sollte noch erwähnen, dass der Hintergrund nie gezeichnet wird, auch wenn ich das Fenster verschiebe und somit das Rechteck erscheint.
Code:
package res;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class GamePanel extends JPanel{
protected Player player1;
protected BufferedImage background;
public GamePanel(Player player1){
this.player1 = player1;
System.out.println(Boot.zahl);
createBackground();
}
protected void createBackground(){
try {
background = ImageIO.read(getClass().getClassLoader().getResourceAsStream("res/background1.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
protected void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
System.out.println("fenfr");
//g.drawImage(background, 0, 0, null);
g.drawRect(50, 50, 40, 50);
//g.drawImage(player1.getImagePlayer(), player1.getPosX(), player1.getPosY(), null);
repaint();
}
}
MfG
Luuschi