JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Gedanken zum Timing

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 04.10.2005, 16:31    Titel: Gedanken zum Timing Antworten mit Zitat

Hab mir mal ein paar Gedanken über Timing nochmal gemacht, da gibts ja mehrere Möglichkeiten:

1. Man berechnet anhand von der vergangenen Zeit vom letzten Frame die Anzahl der Pixel, die die Figur vorrückt.Also in der Form

CPP:
x +=(( timeGetTime() - lasttime ) * faktor);


Dann läuft es überall gleich, allerdings hat die Sache anscheinend einen Haken. Confused Die Figur ruckelt dann irgendwie ziemlich bzw. "vibriert" ( jedenfalls bei mir (?) )

Beispielprogramm, wo es ruckelt... ( Pfeiltasten drücken! )
2. Nach ner bestimmten Zeit wird es einfach um z.B. 5 Pixel vorschoben

CPP:
if(timeGetTime()-lasttime >= 100)
x+=5:


Ist ja im Prinzip wie 1., nur das es noch ungenauer ist...

3. Man berechnet jede Sekunde z.B. die Framerate und berechnet dann immer, um wie viel die Figur bei jedem Frame bewegt wird. Dann läuft es zwar flüssig, aber wenn größere Framerate-Schwankungen auftreten, kann es dann ziemlich ungleichmäßig werden.

4. Könnte man ja VSYNC anstellen und dann einfach die Framerate einmalig berechnen, vorrausgesetzt, dass die GraKa auch die Frequenz des Monitors erreicht, und dann immer bei jeden Frame draufaddiert. Dann läuft es flüssig und man hat keine Geschwindigkeitsänderungen. Aber irgendwie gefällt mir das nicht ganz wegen der Vorraussetzung. Embarassed

Gibt es noch andere Möglichkeiten oder mach ich bei 1. irgendwas falsch? Confused
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 04.10.2005, 16:39    Titel: Antworten mit Zitat

Die erste Möglichkeit (Schrittweite per Zeitdifferenz ermitteln) ist meines erachtens die Beste. Das "Ruckeln" liegt an der niedrigen Auflösung von TimeGetTime() (55 oder 10 Millisekunden, Win9x oder 2k/XP)
Nutze den PerformanceTimer und rechne in kleineren Größeneinheiten und merke dir "halbe Pixel"...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 04.10.2005, 16:43    Titel: Antworten mit Zitat

Ich dachte timeGetTime() hat ne Auflösung von 1 Millisekunde, dann brauch ich mich nicht so wundern. Rolling Eyes
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 05.10.2005, 10:13    Titel: Antworten mit Zitat

Die Auflösung von timeGetTime() hängt leider vom Betriebssystem ab Sad
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OLiver
Super JLI'ler


Alter: 33
Anmeldedatum: 29.06.2003
Beiträge: 306
Wohnort: Jena
Medaillen: Keine

BeitragVerfasst am: 05.10.2005, 10:55    Titel: Antworten mit Zitat

Naja, mit dem PerformanceCounter klappts nun flüssig. Smile
_________________
http://www.sieder25.org/ (Siedler 2 - Remake)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum