F
fps
Gast
Hallo,
nachdem ich mich entschlossen habe, ein eigenes Spiel mit Java zu schreiben, bin ich ersteinmal hier ins Forum gekommen und habe mir ein Paar Threads durchgelesen und die Gedanken darin. Dabei habe ich sowas wie FPS und FrameLimiter aufgefangen.
Also ersteinmal ist es ja klar, dass ich ein JFrame habe und eine Klasse, die von JComponent abgeleitet ist und ein Runnable ist und praktisch mein "Spielpainter" realisiert. Aus vielen Threads und einigen Tutorials ergibt sich folgender Standardmäßiger Aufbau der run-Methode:
Das funktioniert auch, doch bewegt sich bei mir die FPS-Rate bei 83 FPS. Und das ist - meiner Meinung nach - zu hoch, denn einige Anspruchsvolle Spiele (auf meinem PC) haben eine Rate, die sich zwischen 30-50 FPS bewegt.
Nun beim Nachdenken über dieses Problem viel mir das "Thread.sleep(10)" ins Auge: die Sleepzeit ist konstant. Kann man nicht irgendwie eine sich anpassende Sleepzeit berechnen anhand einer konstanden Framerate? Ich denke, dass ist es, was ein FrameLimiter macht: er sorgt dafür, dass die Framerate an das System angepasst wird und sich "normal" verhält. Ist ein langsames System vorhanden, geht die FPS durch den Limiter in den Keller, da FrameSkipping betrieben werden muss, damit nicht alles abschmiert.
Also, was will ich nun hier? Es geht mir darum, meine Gedanken noch ein bisschen zu ordnen, sodass ich mir überlegen kann, wie ich meinen GamePainter nun richtig aufbaue, damit mir das Ding später nicht vor die Füße fliegt!
Es wäre also wirklich super nett, wenn Ihr ein Paar Gedanken schreiben würdet, die mich irgendwie weiterbringen! Vieleicht habt Ihr auch noch Links oder soetwas - immer gerne!!!
Mit bestem Gruß,
fps (alias Max)
nachdem ich mich entschlossen habe, ein eigenes Spiel mit Java zu schreiben, bin ich ersteinmal hier ins Forum gekommen und habe mir ein Paar Threads durchgelesen und die Gedanken darin. Dabei habe ich sowas wie FPS und FrameLimiter aufgefangen.
Also ersteinmal ist es ja klar, dass ich ein JFrame habe und eine Klasse, die von JComponent abgeleitet ist und ein Runnable ist und praktisch mein "Spielpainter" realisiert. Aus vielen Threads und einigen Tutorials ergibt sich folgender Standardmäßiger Aufbau der run-Methode:
Java:
public void run() {
long delta, last, fps = 0;
while (!Thread.interrupted()) {
delta = System.nanoTime()-last;
last = System.nanoTime();
fps = ((long) 1e9)/delta;
doOtherStuff();
repaint();
try {
Thread.sleep(10);
} catch (Exception e) {}
}
}
Das funktioniert auch, doch bewegt sich bei mir die FPS-Rate bei 83 FPS. Und das ist - meiner Meinung nach - zu hoch, denn einige Anspruchsvolle Spiele (auf meinem PC) haben eine Rate, die sich zwischen 30-50 FPS bewegt.
Nun beim Nachdenken über dieses Problem viel mir das "Thread.sleep(10)" ins Auge: die Sleepzeit ist konstant. Kann man nicht irgendwie eine sich anpassende Sleepzeit berechnen anhand einer konstanden Framerate? Ich denke, dass ist es, was ein FrameLimiter macht: er sorgt dafür, dass die Framerate an das System angepasst wird und sich "normal" verhält. Ist ein langsames System vorhanden, geht die FPS durch den Limiter in den Keller, da FrameSkipping betrieben werden muss, damit nicht alles abschmiert.
Also, was will ich nun hier? Es geht mir darum, meine Gedanken noch ein bisschen zu ordnen, sodass ich mir überlegen kann, wie ich meinen GamePainter nun richtig aufbaue, damit mir das Ding später nicht vor die Füße fliegt!
Es wäre also wirklich super nett, wenn Ihr ein Paar Gedanken schreiben würdet, die mich irgendwie weiterbringen! Vieleicht habt Ihr auch noch Links oder soetwas - immer gerne!!!
Mit bestem Gruß,
fps (alias Max)