Framerate berechnen funktioniert nicht so ganz
-
hallo leute
ich hab hier ein programm was auch etwas zeichnen soll
damit das ganze nicht ungleichmässig ruckelt und sowas hab ich versucht eine framebremse reinzubauen, unter anderem mit den hier shconmal gefundenen tips zur framerate berechnungklappt allerdings nicht!
erstmal ein bisschen code:
public class ... { private Thread th; private int framesCount = 0; private int frames = 1; private float frameTime = 0.0f; public void init() { this.th = new Thread(this); } public void start() { th.start(); } public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); while (true) { // abbruchbedingungen sind drin aber hier nicht von bedeutung repaint(); StandardFunctions.Sleep((long)(this.frameTime)); Thread.currentThread().setPriority(Thread.MAX_PRIORITY); } System.exit(1); } public void paint(Graphics g) { // blablabla was halt gezeichnet werden soll } public void update() { // Doublebuffering implentiert this.fpsBerechnen(); } private void fpsBerechnen() { this.framesCount++; if ( nanoTime()-this.t1 >= StandardFunctions.millisToNanoSecs(1000L) ) { this.frames = this.framesCount; this.frameTime = (1000.0f/(float)(this.frames)); this.framesCount = 0; this.t1 = nanoTime(); } } }
(edit: hab ausversehen jetzt schon absenden geklickt obwohl ich nicht fertig war -.-)
so das problem ist nun dass ich selbst wenn ich einen kleinen schwarzen kasten zeichnen möchte nur maximal 3 frames hab
der zeigt mir dann an dass frametime schon recht gross ist mit 500 ms oder 333.3333 ms
und ich hatte es früher shcon dass da locker dann 800 oder 900 fps rauskamenich weis nur nicht warum weil eigentlich hab ich nichts geändert im gegensatz zu meinem damaligen programm...
hab ich da irgendwo nen denkfehler oder ist mein quadcore echt so langsam oder ist java auf einmal langsam geworden?
-
Es heisst Frames per Second (FPS). Welche Variable speichert den Wert / Wo wird er berechnet?
-
es ist so
jedes mal wenn ein neues bild gezeichnet wird, erhöht sich die variable framesCount
nach einer sekunde wird der wert auf 0 zurückgesetzt aber vorher wird frames mit dem wert belegtdie frametime berechent sich dann aus 1000(millisekunden) geteilt durch den wert von frames bzw framescount
somit ist frames immer der aktuelle fps wert
so ist es auch hier beschrieben
klick!mich