Guten Abend,
ich programmiere ein 2D rpg. zentral steht bei mir die Klasse "Spiel" (erbt von JFrame) die ich in der main Methode aufrufe und in selbiger erzeuge ich die Objekte der Klasse Spieler und Landschaft(welche als JPanel hinzugefügt wird).
in Landschaft füge ich kacheln zu einem BufferedImage zusammen, welches ich dann im hintergrund zeichne mit paintComponent. Für bestimmte Objekte (die im hintergrund gezeichnet werden) füge ich ein JLabel hinzu um per "getComponent" damit zu interagieren.
Dies klappt soweit, dass ich, wenn ich an eine "Tür laufe", sich die Landschaft ändert.
in "Landschaft" nutze ich " setLandschaft, dies funktioniert beim laden des Spiels ohne Probleme. Nutze ich nun die Klasse Tür, wird zwar die Landschaft geändert, aber die Spielfigur nicht hinzugefügt..
Ich habe einige Codefragmente schon geändert, jedoch bleibt das Problem unverändert bestehen.
Das ist die Methode in Landschaft:
mit "zeichneUntergrund()" erstellt die "Landschaft" klasse ein BufferedImage aus gegebenen Kacheln und zeichnet es.
ich programmiere ein 2D rpg. zentral steht bei mir die Klasse "Spiel" (erbt von JFrame) die ich in der main Methode aufrufe und in selbiger erzeuge ich die Objekte der Klasse Spieler und Landschaft(welche als JPanel hinzugefügt wird).
in Landschaft füge ich kacheln zu einem BufferedImage zusammen, welches ich dann im hintergrund zeichne mit paintComponent. Für bestimmte Objekte (die im hintergrund gezeichnet werden) füge ich ein JLabel hinzu um per "getComponent" damit zu interagieren.
Dies klappt soweit, dass ich, wenn ich an eine "Tür laufe", sich die Landschaft ändert.
in "Landschaft" nutze ich " setLandschaft, dies funktioniert beim laden des Spiels ohne Probleme. Nutze ich nun die Klasse Tür, wird zwar die Landschaft geändert, aber die Spielfigur nicht hinzugefügt..
Ich habe einige Codefragmente schon geändert, jedoch bleibt das Problem unverändert bestehen.
Java:
public void setLandschaft(String land, int x, int y)
{
if(landschaft!=null) remove(landschaft); // falls Landschaft vorhanden, alte löschen
landschaft = new Landschaft(land, spieler, x, y); //neue Landschaft erstellen
spieler.setLandschaft(landschaft); //Spieler Landsch. übergeben
landschaft.setSpiel(this);
/*
* Spieler in die Mitte des Bildschirms
*/
spieler.setLocation((this.getToolkit().getScreenSize().width/2)-landschaft.getX(),
(this.getToolkit().getScreenSize().height/2)-landschaft.getY());
add(landschaft); //Landschaft anzeigen
}
Das ist die Methode in Landschaft:
mit "zeichneUntergrund()" erstellt die "Landschaft" klasse ein BufferedImage aus gegebenen Kacheln und zeichnet es.
Java:
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
this.g2d = g2d;
this.zeichneUntergrund(g2d);
g.drawImage(spieler.getImage(), spieler.getX(), spieler.getY(),
spieler.getWidth(), spieler.getHeight(), null); // Spielfigur zeichnen
}