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?