Hallo Leute
Ich bin zurzeit an einem Projekt für die Schule (Informatiker, 3Lehrjahr) und mache ein Snake.
Ich habe erst ca seit einem halben jahr Java-erfahrung, also bitte ein wenig Nachsichtig sein =)
das Snake läuft eigentlich gut, bis auf die repaint-methode. Ich habe entweder einen Do-While-Loop mit sleep oder einen Timer, der alle 1000ms (oder schneller) ein actionperformed-actionevent mit einen repaint machen soll (habe die 2 varianten ausprobiert, aber keine geht).
die repaint-methode zeichnet beim aufrufen den momentanen hintergrund des fensters (also was hinter dem fenster ist, zb ein teil eclipse oder desktop oder so), sollte aber einen grauen background mit den snake-elementen zeichnen
durch das bewegen des Fensters oder ähnliches Funktioniert die paint-methode, aber durch aufrufen von repaint eben seltsamerweise nicht.
hier mal ein bischen Code zur verständlichkeit:
der code beinhaltet beide oben genannten methoden, aktiv ist aber nur loop (timer muss beim konstruktor entklammert werden um das zu testen)
Das Menu erstellt eine neue Snake-Karte (File ist ein XML-File, das über JFilechooser eingelesen wird, aber spielt keine rolle)
hier die paint-methode(sollte eigentlich ok sein, da sie bei fenster ziehen funktioniert):
die loop:
der konstruktor der karte:
und noch der taskperformer:
da das ganze so aber recht unverständlich ist (mit den variabeln etc) lade ich hier noch das projekt rauf
ich währe echt dankbar wenn mir jemand helfen könnte, ich habe den ganzen samstag nachmittag bisher mit googlen verschwendet, und nichts gefunden
Ich bin zurzeit an einem Projekt für die Schule (Informatiker, 3Lehrjahr) und mache ein Snake.
Ich habe erst ca seit einem halben jahr Java-erfahrung, also bitte ein wenig Nachsichtig sein =)
das Snake läuft eigentlich gut, bis auf die repaint-methode. Ich habe entweder einen Do-While-Loop mit sleep oder einen Timer, der alle 1000ms (oder schneller) ein actionperformed-actionevent mit einen repaint machen soll (habe die 2 varianten ausprobiert, aber keine geht).
die repaint-methode zeichnet beim aufrufen den momentanen hintergrund des fensters (also was hinter dem fenster ist, zb ein teil eclipse oder desktop oder so), sollte aber einen grauen background mit den snake-elementen zeichnen
durch das bewegen des Fensters oder ähnliches Funktioniert die paint-methode, aber durch aufrufen von repaint eben seltsamerweise nicht.
hier mal ein bischen Code zur verständlichkeit:
der code beinhaltet beide oben genannten methoden, aktiv ist aber nur loop (timer muss beim konstruktor entklammert werden um das zu testen)
Das Menu erstellt eine neue Snake-Karte (File ist ein XML-File, das über JFilechooser eingelesen wird, aber spielt keine rolle)
Java:
Karte game = new Karte(file);
game.loop();
hier die paint-methode(sollte eigentlich ok sein, da sie bei fenster ziehen funktioniert):
Java:
public void paint(Graphics g) {
for (int i = 0; i < tiere.size(); i++) {
((Kartenobjekt) tiere.elementAt(i)).zeichne(g);
}
for (int i = 0; i < schlangen.size(); i++) {
((Schlange) schlangen.elementAt(i)).zeichne(g);
}
for (int i = 0; i < mauern.size(); i++) {
((Kartenobjekt) mauern.elementAt(i)).zeichne(g);
}
super.paint(g);
}
die loop:
Java:
public void loop () {
do {
for (int i = 0; i < schlangen.size(); i++) {
//schlangen.elementAt(i).bewege(collision(schlangen.elementAt(i).position));
schlangen.elementAt(i).bewege(false);
}
for (int i = 0; i < tiere.size(); i++) {
System.out.println(tiere.elementAt(i).getlebensdauer());
int dauer = tiere.elementAt(i).getlebensdauer();
if (dauer > 0) {
tiere.elementAt(i).setlebensdauer(dauer = dauer - 1);
} else {
tiere.removeElementAt(i);
createtier();
}
}
this.repaint();
try
{
Thread.sleep(dauer);
}
catch(InterruptedException e) {}
} while (schlangen.size()>0);
}
der konstruktor der karte:
Java:
public Karte(File xmlfile) throws HeadlessException {
// GUI erstellen
super("SNAKE Singleplayer Modus");
// XML File einlesen
this.xmlfile = xmlfile;
Einlesen();
this.setVisible(true);
//this.setLayout(new FlowLayout());
this.setSize(kartenbreite, kartenhöhe);
//new Timer(dauer, taskPerformer).start(); //<---- da ist der timer (variante 2)
addWindowListener(new MyWindowListener());
addKeyListener(new MyKeyListener());
}
und noch der taskperformer:
Java:
private ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < schlangen.size(); i++) {
//schlangen.elementAt(i).bewege(collision(schlangen.elementAt(i).position));
schlangen.elementAt(i).bewege(false);
}
for (int i = 0; i < tiere.size(); i++) {
System.out.println(tiere.elementAt(i).getlebensdauer());
int dauer = tiere.elementAt(i).getlebensdauer();
if (dauer > 0) {
tiere.elementAt(i).setlebensdauer(dauer = dauer - 1);
} else {
tiere.removeElementAt(i);
createtier();
}
}
Karte.this.repaint();
//Karte.this.update();
};
};
da das ganze so aber recht unverständlich ist (mit den variabeln etc) lade ich hier noch das projekt rauf
ich währe echt dankbar wenn mir jemand helfen könnte, ich habe den ganzen samstag nachmittag bisher mit googlen verschwendet, und nichts gefunden