Hallo,
Ich versuche mich zur Zeit an ein 2D Spiel in dem man Levels aus Text-Dateien einließt. Das Funktioniert ja auch soweit, Da die Variablen die ich zum zeichnen brauche erfolgreich aus der Text-Datei ausgelesen wurden.
Nun rätsel ich schon die ganze Zeit lang wie ich diese Fehlermeldung beseitigen kann:
Ich weiß ungefähr was der Grund für diese Fehlermeldung sein kann. Ich nehme an Ich erzeuge die Klasse "Ground" an der falschen stelle so das (siehe oben) meine paintComponent nicht die paint Methode der Klasse "Ground" aufrufen kann. Aber ich wüßte nicht an welcher anderen Stelle ich das machen sollte.
Ich stell einfach mal mein bis jetzt geschriebenen Code rein. Ich hoffe ihr könnt mir helfen. Bin echt verzweiflt!
Das ist meine Main-Class
Das ist die Kasse in der das Level eingelesen wird:
Und das ist die Klasse "Ground". Die ganzen verschiedenen Objekte Ground speichere ich alle in ein Vector.
Und hier wie die Text-Datei aussieht aus der ich mein Level aufbaue.
Ich versuche mich zur Zeit an ein 2D Spiel in dem man Levels aus Text-Dateien einließt. Das Funktioniert ja auch soweit, Da die Variablen die ich zum zeichnen brauche erfolgreich aus der Text-Datei ausgelesen wurden.
Nun rätsel ich schon die ganze Zeit lang wie ich diese Fehlermeldung beseitigen kann:
Code:
Main.java:44: cannot find symbol
symbol : method paint(java.awt.Graphics2D)
location: class java.lang.Object
objects.get(i).paint(g2D);
Ich weiß ungefähr was der Grund für diese Fehlermeldung sein kann. Ich nehme an Ich erzeuge die Klasse "Ground" an der falschen stelle so das (siehe oben) meine paintComponent nicht die paint Methode der Klasse "Ground" aufrufen kann. Aber ich wüßte nicht an welcher anderen Stelle ich das machen sollte.
Ich stell einfach mal mein bis jetzt geschriebenen Code rein. Ich hoffe ihr könnt mir helfen. Bin echt verzweiflt!
Das ist meine Main-Class
Code:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.util.*;
public class Main extends JPanel {
private Image image;
public Vector objects = new Vector();
public Main() {
Map map = new Map(this, "./level/testLevel01.txt");
}
public static void main(String[] arguments) {
JFrame frame = new JFrame("TestSpiel");
Main main = new Main();
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(800, 600);
frame.setLocation((screen.width-frame.getSize().width)/2,
(screen.height-frame.getSize().height)/2);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(main);
frame.setVisible(true);
}
public void addObject(int xPosObject, int yPosObject, String imagePath) {
image = Toolkit.getDefaultToolkit().getImage(imagePath);
MediaTracker mt = new MediaTracker(this);
mt.addImage(image, 0);
try{
mt.waitForID(0);
} catch (InterruptedException e) {
System.out.println("---ERROR---");
}
objects.addElement(new Ground(this, xPosObject, yPosObject, image));
}
public void paintComponent(Graphics g) {
Graphics2D g2D = (Graphics2D)g;
for(int i = 0; i < objects.size(); i++) {
objects.get(i).paint(g2D);
}
}
}
Das ist die Kasse in der das Level eingelesen wird:
Code:
import java.io.*;
import java.awt.*;
public class Map {
public Main main;
private String imagePath = "";
private int xPosObject;
private int yPosObject;
public Map(Main main, String mapPath) {
try{
FileReader level = new FileReader(mapPath);
BufferedReader levelBuffer = new BufferedReader(level);
int readPos = 0;
String charSave = "";
String imageSave = "";
boolean readImage = false;
boolean eof = false;
while(!eof) {
String line = levelBuffer.readLine();
if(line == null) {
eof = true;
} else {
for(int i = 0; i<line.length(); i++) {
if(line.charAt(i) != ',') {
if (line.charAt(i) != '"') {
if (readImage == false) {
charSave = charSave + line.charAt(i);
}
if (readImage == true) {
if(line.charAt(i) != '"' &&
line.charAt(i) != ';') {
imageSave = imageSave + line.charAt(i);
} else {
imagePath = imageSave;
imageSave = "";
readImage = false;
readPos = 0;
}
}
} else {
readImage = true;
}
} else {
if(readPos == 0) {
xPosObject = Integer.parseInt(charSave);
}
if(readPos == 1) {
yPosObject = Integer.parseInt(charSave);
}
charSave = "";
readPos++;
}
}
main.addObject(xPosObject, yPosObject, imagePath);
}
}
levelBuffer.close();
} catch(IOException e) {
System.out.println("--- ERROR ---");
}
}
}
Und das ist die Klasse "Ground". Die ganzen verschiedenen Objekte Ground speichere ich alle in ein Vector.
Code:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class Ground {
public Main main;
private Image image;
private int xPosObject;
private int yPosObject;
public Ground(Main main, int xPosObject, int yPosObject, Image image) {
this.main = main;
this.xPosObject = xPosObject;
this.yPosObject = yPosObject;
this.image = image;
}
public void paint(Graphics2D g2D) {
g2D.drawImage(image, xPosObject*25, yPosObject*25, main);
}
}
Und hier wie die Text-Datei aussieht aus der ich mein Level aufbaue.
Code:
5,15,"./pics/ground01.gif";
6,15,"./pics/ground02.gif";
7,15,"./pics/ground02.gif";
8,15,"./pics/ground02.gif";
9,15,"./pics/ground02.gif";
10,15,"./pics/ground03.gif";
5,16,"./pics/ground04.gif";
6,16,"./pics/ground05.gif";
7,16,"./pics/ground05.gif";
8,16,"./pics/ground05.gif";
9,16,"./pics/ground05.gif";
10,16,"./pics/ground06.gif";