Guten Tag, ich habe ein Menü und möchte dort jetzt ein Spiel einbinden wenn man auf Singleplayer klickt. Das ist die Klasse die derzeit erscheint wenn ich auf "Singleplayer" klicke:
Nun die Frage, derzeit zeichnet er nur neu wenn ich in Paint am Ende Repaint schreibe, was halt Sinn ergibt aber eine Endlosschleife erzeugt was nicht gesund ist Ich habe versucht repaint in eine neue Methode zu schreiben, aber diese muss ja iwie immer wieder aufgerufen werden, wie krieg ich das genau hin?
Java:
package GruppeD;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
//Vorbereitetes Panel für den Aufbau der Spieloberfläche für Singleplayer-Modus
class SinglePlayerPanel extends JPanel implements ActionListener {
private MainPanel mainPanel;
private int bgX = 0;
private int bgY = 0;
Timer time;
// Hintergrund
Image backgroundImage;
public SinglePlayerPanel(MainPanel mainPanel) {
this.mainPanel = mainPanel;
// Bilder laden
loadImages();
// Timer (Wenn die beiden Zeilen auskommentiert sind, funktionierts.)
// time = new Timer(10,this);
// time.start();
}
//Sämtliche Bilder für das Spiel laden
private void loadImages() {
try {
backgroundImage = ImageIO.read(getClass().getResource("/GruppeD/images/Game/background.png"));
}
catch(IllegalArgumentException iae) {
JOptionPane.showMessageDialog(this, "Eine Grafikdatei wurde nicht gefunden!", "IllegalArgumentException", JOptionPane.ERROR_MESSAGE);
System.err.println(iae.toString()); //Ausgabe für den Entwickler auf der Konsole
}
catch(IOException ioe) {
JOptionPane.showMessageDialog(this, "Fehler beim Einlesen einer Grafikdatei!", "IOException", JOptionPane.ERROR_MESSAGE);
System.err.println(ioe.toString()); //Ausgabe für den Entwickler auf der Konsole
}
}
// Zeichnen
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Hintergrund zeichnen
g.drawImage(backgroundImage, bgX, 0, this);
// Hintergrund nachzeichnen (Sidescroll-Effekt)
if (bgX < 0)
g.drawImage(backgroundImage, getWidth()+bgX, 0, this);
// Hintergrund verschieben
if (bgX < -getWidth()) {
bgX = 0;
}
else {
bgX--;
}
// Muss weg, ich weiß, aber wohin?
repaint();
}
public void actionPerformed(ActionEvent e) {
mainPanel.showMenuPanel();
}
}
Nun die Frage, derzeit zeichnet er nur neu wenn ich in Paint am Ende Repaint schreibe, was halt Sinn ergibt aber eine Endlosschleife erzeugt was nicht gesund ist Ich habe versucht repaint in eine neue Methode zu schreiben, aber diese muss ja iwie immer wieder aufgerufen werden, wie krieg ich das genau hin?