Ruckler in Spiel

  • Antworten:3
Dark Blood Studios
  • Forum-Beiträge: 203

02.10.2011, 18:45:27 via Website

Hi, irgendwie zweifle ich grad an meinem Verstand. Ich habe ein Spiel entwickelt das soweit auch flüssig läuft. Jetzt wollte ich eine Regelung einbauen die dafür sorgt, dass die Gameloop immer gleich oft pro Sekunde durchlaufen wird, damit ich eine konstannte fps habe und sich die Männchen immer gleich schnell bewegen. Dafür habe ich follgenden Code in die Gameloop rein gebaut:

1tmpTime = System.currentTimeMillis();
2sleeptime = 40 - tmpTime - last;
3if (sleeptime > 0) {
4 try {
5 Thread.sleep(sleeptime);
6 } catch (InterruptedException e) {}
7}
8Log.v("test", "time:" + (System.currentTimeMillis() - last));
9last = tmpTime;

Nur plötzlich gibt es kleine Ruckler und das Bild flimmert ein wenig.

An was kann das liegen?

Antworten
Maximilian O
  • Forum-Beiträge: 990

02.10.2011, 21:31:02 via App

Hey,
warum möchtest Du unbedingt eine konstante fps? Ich wurde auch diese Woche belehrt, das es besser ist folgendes in deinem gameloop zu machen:
now = System.nanoTime
diff = now-Last
Last = now

nun rechnest Du einfach aus, wieviele px sich deine Figuren in der diff Zeit bewegen sollen. fertig
Das ist die eleganteste Lösung.
mfg

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Dark Blood Studios
  • Forum-Beiträge: 203

02.10.2011, 23:21:21 via Website

Maximilian O
warum möchtest Du unbedingt eine konstante fps?
Es bewegen sich mehrere Männchen und das ganze Level auf dem Bildschirm, wenn ich das Position als float speichere wird mehr Prozessorleistung beim der Kollisionserkennung usw. gebraucht als wenn ich int nutze, deshalb habe ich es nicht auf die von dir beschriebene Weise gemacht.

— geändert am 02.10.2011, 23:21:57

Antworten
Tobias Eckert
  • Forum-Beiträge: 155

03.10.2011, 12:57:13 via Website

Den Float Wert musst Du ja eh in int umwandeln um die Sprites zu positionieren. Für die Kollisionserkennung kannst Du dann mit diesen int Werten arbeiten.

Generall kostet die Verwendung von Float Werten in der Tat mehr Rechenzeit als wenn Du ausschliesslich mit integer Werten arbeitest. Die Geräte die momentan auf dem Mark sind schaffen um die 20 Millionen floating point operations pro Sekunde. Wenn Du weniger als eine Million Sprites auf dem Screen hast sollte das ja eigentlich für Deine Berechnungen reichen :)

Wenn Du da Performance Probleme hast würde ich fast tippen dass die in einem anderen Bereich liegen.

Antworten