framerate wtf

Status
Nicht offen für weitere Antworten.

wurstfinger

Mitglied
Grüße! ich wollte spaßeshalber gern ein kleines mini java applet spiel schreiben. Aber irgendwas scheine ich schon von anfang an fundamental falsch zu machen. Denn wie kann es sein, dass ich in folgendem Minimalprogramm, framerate-drops auf bis zu 1-2 fps drinhab? Wie soll ich ruckler vermeiden, wenn er selbst hierbei ab und an aus dem nichts auf minimale 2 frames in der Sekunde abfällt? Irgendwas scheint wie gesagt katastrophal falsch zu sein. aber was? Ich danke und bitte um nachsicht...
Code:
public class main extends Applet implements Runnable 
{
	private Thread mthread;
	private Image offscreenImage;
	private Graphics offscr;
	private int mywidth, myheight;
	
	private long time_fps=0;
	private float fps;
	private float fpslow=9999;
	
	public void init() { 
		mywidth=getSize().width; 
		myheight=getSize().height;
		
		offscreenImage = createImage(mywidth, myheight);
		offscr = offscreenImage.getGraphics();
	}
	
	public void start() {
		mthread = new Thread(this);
		time_fps=System.currentTimeMillis()-1;
		mthread.start();
		//Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
	}
	
	public void run() 
	{
		long tm = System.currentTimeMillis();

		while(true)
		{	
			tm += 20;
			repaint();

			long timenow=System.currentTimeMillis();
			fps = (float) (1000/(float)(timenow-time_fps));
			if(fps<fpslow) fpslow=fps;
			time_fps=timenow;
			
			try {
				Thread.sleep(Math.max(0, tm - timenow));

			} catch (InterruptedException e) { ; }
			
		}
	}
	
	public void paint (Graphics g)  
	{
		offscr.setColor(Color.white);
		offscr.fillRect(0, 0, mywidth, myheight);
		offscr.setColor(Color.black);

		offscr.drawString("fps: "+String.valueOf(fps),5,myheight-50);
		offscr.drawString(" ### lowest: "+String.valueOf(fpslow), 5, myheight-30);

		g.drawImage(offscreenImage, 0, 0, this);
	}
}
 

Schandro

Top Contributor
Keine Ahnung warums bei dir 2 fps sind.
Ich hab bei deinem Code ca. 62 fps. Wenn ich das Thread.sleep im Thread rausmach, ca. 3.000 fps...

(Ich hab den Code in Eclipse und nicht im Browser gestartet, vllt. liegts dadran? (auch wenns unwahrscheinlich ist))
 
Zuletzt bearbeitet:

wurstfinger

Mitglied
danke fürs testen. Ich hab schon auch 62 fps, das Problem ist nur, dass ich wenn ichs ne Weile laufen lass (<1min) hin und wieder für nen Sekundenbruchteil Einbrüche auf 12 oder gar 2 fps hab (siehe fpslow). Ich weiß nicht worans liegt, aber es sorgt eben z.B bei nem minisnake oder so für seltene aber sehr nerfige unmotivierte "spikes".
 

Schandro

Top Contributor
Achso. Ich hab den Code grade 12 mal gestartet und alle "Instanzen" des Programmes gleichzeitig laufen lassen für 15 Minuten. Die niedrigste fps war jeweils 15. Warum das so ist weiß ich nicht, aber ich denke mal das ist normal und wird bei richtigen Spielen auch nicht stören. (der Zustand der niedrigen FPS-Zahl dauert schließlich nur ein paar Millisekunden an)
 

wurstfinger

Mitglied
Hey du beschämst mich mit dem Aufwand, den du betreibst :D Aber danke, dann liegt das Problem vielleicht eher an meinem PC oder so. Bin schon zufrieden mit der Erkenntnis, dass kein fundamentaler Fehler in der Grundstruktur des Programms liegt. Thx nochmal!
 

ice-breaker

Top Contributor
Ein Sekundenbruchteil nach länger Laufzeit und unregelmäßig?
Eventuell läuft da kurzzeitig der JIT-Compiler der JRE.

Edit: Aber deine FPS-Berechnung ist unlogisch. Da repaint asynchron läuft, misst du keine FPS sondern eher Loops/Sec.

Miss die Zeit in deiner Paint-Methode vor dem ersten painten und nochmal nach dem letzten, dann schaust du wieoft das in 1sec reinpasst, und das sind deine FPS.
Dies wird natürlich nichts an der Anzeige ändern, wenn Java nix repainten muss.
 
Zuletzt bearbeitet:

wurstfinger

Mitglied
stimmt, streng genommen sind das keine fps (bin die freuden von fullscreen apps gewohnt, wo mir fast alle aufmerksamkeit der cpu gehört :), aber das problem bleibt ja dasselbe. thx für den JIT-Compiler hinweiß!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Framerate normal ? Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben