LevelEditor - Grundsatzfrage

Status
Nicht offen für weitere Antworten.

Daether

Mitglied
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 :
Code:
		Spiel_Spielfeld = new spielfeld( 10 , 20 , 66 , 66 , Image_Holder ) ;
		f.getContentPane().add(Spiel_Spielfeld);
		
		Auswahl_Menue = new auswahlmenue() ;
		f.getContentPane().add(Auswahl_Menue);


Code:
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

Bekanntes Mitglied
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

Mitglied
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 :
Code:
Listen ob auf Panel A was passiert {
If ( Buttengeklickt auf Panel A ( zur Laufzeit ) ) {
Male auf Panel B
}
}
 

Polli86

Mitglied
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

Code:
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

Code:
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

Mitglied
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

Bekanntes Mitglied
@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

Mitglied
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

Bekanntes Mitglied
sehr gut :)

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

grüsse aus der schweiz
m@nu
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Leveleditor Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen

Neue Themen


Oben