Hallo,
ich will ein kleines ArcadeGame schreiben, aber KEIN Applet, sondern eine Application.
Also dachte ich mir ich brauche eine Konsole, die die Bilder alle x Sekunden updatet und auf Tastatureingaben mittels eines KeyAdapters hört. Die ganze Klasse ist von JRame abegleitet und implementiert Runnable um sich als Thread zu tarnen. Hier mein kürzestes kompilierbares Beispiel:
In der Paint Methode wird einfach der Hintergrund auf eine zufällige Farbe gesetzt, in der run() Methode wird paint gerufen und dann solange gewartet bis 40ms verstrichen sind. In der Theorie sehe ich keinen Fehler, aber es funktioniert nicht.
Das merkwürdige ist, ich habe irreprodizierbare Fehler mit einer ähnlich Konstruktion in dem PacmanGame was ich gerade schreibe. Mal funktioniert die Tastatureingabe nicht, mal die Grafik nicht, mal aber auch beides.
Ich hänge jetzt schon seit drei Tagen daran und mittlerweile habe ich auch keine Idee mehr, die Tutorials durch Google geben nicht so viel her.
Ich bin offen für jegliche Vorschläge, auch für einen generellen Klassendesign-Wechsel, ich schreibe so eine Konsole das erste Mal mit JAVA.
ich will ein kleines ArcadeGame schreiben, aber KEIN Applet, sondern eine Application.
Also dachte ich mir ich brauche eine Konsole, die die Bilder alle x Sekunden updatet und auf Tastatureingaben mittels eines KeyAdapters hört. Die ganze Klasse ist von JRame abegleitet und implementiert Runnable um sich als Thread zu tarnen. Hier mein kürzestes kompilierbares Beispiel:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
public class TestBoard extends JFrame implements Runnable {
Thread myThread;
int rate = 40; //refresh after 40 ms
boolean pause;
private class MyKeyAdapter extends KeyAdapter{
@Override
public void keyPressed(KeyEvent arg0) {
super.keyPressed(arg0);
System.out.println("Key Pressed.");
}
}
public TestBoard(){
this.myThread = new Thread(this);
this.pause = false;
this.setSize(50,50);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.start();
this.addKeyListener(new MyKeyAdapter());
}
@Override
public void paint(Graphics g) {
g.setColor(new Color((float)Math.random(), (float)Math.random(), (float)Math.random()));
g.fillRect(0, 0, this.getWidth(), this.getHeight());
}
public void start(){
if(this.myThread == null){
this.myThread = new Thread(this);
this.myThread.start();
}
}
public void run() {
// while(myThread.isAlive()){
while(true){
long time = System.currentTimeMillis();
this.paint(this.getGraphics());
try{
int sleep = (int) Math.max(0l, time + rate - System.currentTimeMillis());
if(sleep > 0)
Thread.sleep(sleep);
System.out.println(sleep);
}catch(InterruptedException iex){
iex.printStackTrace();
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
TestBoard board = new TestBoard();
}
}
Das merkwürdige ist, ich habe irreprodizierbare Fehler mit einer ähnlich Konstruktion in dem PacmanGame was ich gerade schreibe. Mal funktioniert die Tastatureingabe nicht, mal die Grafik nicht, mal aber auch beides.
Ich hänge jetzt schon seit drei Tagen daran und mittlerweile habe ich auch keine Idee mehr, die Tutorials durch Google geben nicht so viel her.
Ich bin offen für jegliche Vorschläge, auch für einen generellen Klassendesign-Wechsel, ich schreibe so eine Konsole das erste Mal mit JAVA.