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 berechnung

    klappt 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 rauskamen

    ich 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 belegt

    die 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


Anmelden zum Antworten