# LevelEditor - Grundsatzfrage



## Daether (25. Jun 2008)

Moin Moin,
ich habe ein Frage zur Spiele-Programmierung.

Ich versuche einen LevelEditor zu machen, welches aus einem Spielfeld besteht und einem Menü.

Dafür habe ich in meinem "Start"-Klasse 2 Objekte erstellt. 

Objekt der Klasse spielfeld ( extends JPanel ) ;
Objekt der Klasse auswahlmenue ( extends JPanel ) ;

Da ich erstmal einen LevelEditor bauen will, muss wenn etwas im auswahlmenue passiert, die Start-Klasse den Befehl an das Spielfeld weitergeben.

Wie kann ich das realisieren ? 

Code auschnitte :

```
Spiel_Spielfeld = new spielfeld( 10 , 20 , 66 , 66 , Image_Holder ) ;
		f.getContentPane().add(Spiel_Spielfeld);
		
		Auswahl_Menue = new auswahlmenue() ;
		f.getContentPane().add(Auswahl_Menue);
```



```
package block;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class auswahlmenue extends JPanel implements ActionListener {

	private JLabel ueberschrift ;
	public JButton button ;
	
	public auswahlmenue() {
		
		ueberschrift = new JLabel("LevelEditor  Version 0.0.1") ;
		this.add(ueberschrift) ;
		
		button = new JButton("Level laden") ;
		button.addActionListener(this) ;

		this.add(button) ;
		
	}

	public void actionPerformed(ActionEvent e) {
        if ( e.getActionCommand() == "Level laden") {
        	System.out.println(e.getActionCommand()) ;
        }

    }
	
}
```


----------



## Schnitter (25. Jun 2008)

wie wärs mit irgendeiner set()-Methode im Spielfeld?

Also z.B. setTile(Tile t, int x, int y) mit der man dann dann einfach das Tile(/Spielstein) am Punkt x/y setzen kann?

Ich hoffe jetzt einfach mal, dass ich das richtig verstanden habe^^


BTW: Klassennamen immer groß!


----------



## Daether (26. Jun 2008)

Moin,
ich glaube ich habe mich etwas Falsch ausgedrückt. 
Ist aber auch schwer zu erklären.

Ich habe ein JFrame.
Auf diesem Werden 2 Panels per add hinzugefügt. 
Nun Adde ich auf Panel A einen ActionListener. 

Wenn ich nun in diesem Objekt auf einen Button Klicke wird das Event angestoßen und soll auf dem 2. Panel etwas vollführen.

Ich bräuchte also sowas :

Auf JFrame :

```
Listen ob auf Panel A was passiert {
If ( Buttengeklickt auf Panel A ( zur Laufzeit ) ) {
Male auf Panel B
}
}
```


----------



## Polli86 (26. Jun 2008)

Hi Daether,


also ich hätte einen Lösungsvorschlag

Dein Auswahlmenü-Panel muss ja das Spielfeld-Panel kennen um 
Methoden von ihm ausführen zu können, z.B public void draw(Graphics g)

Das heißt du könntest dem Konstruktor von Auswahlmenü das Spielfeldpanel mitgeben


```
public auswahlmenue(spielfeld panelB) {
      this.panelB= panelB // noch Variable anlegen --> panelB

      ueberschrift = new JLabel("LevelEditor  Version 0.0.1") ;
      this.add(ueberschrift) ;
     
      button = new JButton("Level laden") ;
      button.addActionListener(this) ;

      this.add(button) ;
      
   }
```

und in der JFrame Klasse musst du dem auswahlmenü nur noch das machen


```
Spiel_Spielfeld = new spielfeld( 10 , 20 , 66 , 66 , Image_Holder ) ;
      f.getContentPane().add(Spiel_Spielfeld);
      
      Auswahl_Menue = new auswahlmenue(Spiel_Spielfeld) ;
      f.getContentPane().add(Auswahl_Menue);
```

nun könntest du ,in der actionPerformed-Methode 
von auswahlmenü, Methoden von spielfeld benutzen


----------



## Daether (26. Jun 2008)

Wenn ich nun aber die Methode aufrufe im AuswahlPanel und diese eine Funktion zum zeichnen hat, wird dann diese auf dem Frame vorher geaddeten Panel auftauchen ?
Das Objekt was ich übergebe wird ja nur in eine eigene Variable geschrieben, welche nirgendwo angezeigt wird, oder sehe ich das falsch ?


----------



## m@nu (26. Jun 2008)

@Daether: bist du mit den prinzipien von MVC vertraut? swing hat dieses konzept zur grundlage.
falls nicht, kann ich dir wärmstens empfehlen, hier die entsprechenden tutorials hier im board oder sonst draussen im www zu konsultieren.

hier ein grobabriss, wie dein leveleditor technisch funktionieren könnte:

deine daten, also die informationen, wie dein level aussieht, sind irgendwo in einer klasse abgelegt (das ist das model, das M aus MVC)
dein spielfeld wird von der view (V aus MVC) gezeichnet. dies ist im normalfall eine von JComponent abgeleitete klasse welche die methode paintComponent() überschreibt und die informationen aus deinem model visuell für den user zeichnet
deine werkzeugpalette (kann hier als controller, C aus MVC, bezeichnet werden) verändert die daten im model und veranlasst das erneute zeichnen der view per repaint()

ich möchte dich keinesfalls blosstellen  hoffe, du bekommst diesen post nicht in den falschen hals


----------



## Daether (27. Jun 2008)

Moin m@nu,
du trittst mir nicht zu nahe, im Gegenteil !

Das ist mein erstes richtiges "Projekt" mit Java/Swing. Ich kenne mich mit dem Begriff MVC noch nicht aus, bzw. hatte ich den Begriff vorher noch nie gehört. 

Lese mich da heute morgen aber mal ein wenig ein.


----------



## m@nu (27. Jun 2008)

sehr gut 

falls wieder fragen auftauchen meld' dich einfach wieder...
wenn möglich, helf' ich gerne weiter.

grüsse aus der schweiz
m@nu


----------

