# Fehlende Spielfigur auf neuer Landschaft



## mOiterei (1. Mai 2018)

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.


```
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.


```
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
       
    }
```


----------



## Blender3D (20. Mai 2018)

mOiterei hat gesagt.:


> Ich habe einige Codefragmente schon geändert, jedoch bleibt das Problem unverändert bestehen


rufst Du nach 
	
	
	
	





```
setLandSchaft()
```


```
repaint()
```
 auf ? Falls nicht wird nicht neu gezeichnet.


----------



## JuKu (25. Mai 2018)

@Blender3D hat die Lösung vermutlich bereits genannt.

Noch ein Tipp von mir:
AWT / Swing ist kein gutes Framework / Library, um Spiele zu entwickeln.
Früher oder später (ich habe früher auch mal mit Swing angefangen und spreche aus Erfahrung) kommst du an einen Punkt, wo du mit Swing nicht weiter kommst, z.B. wenns um mediale Sachen (z.B. Sound) geht.
Es ist letzendlich deine Entscheidung, aber ich kann dir nur raten, dir einmal libGDX genauer anzusehen.


----------

