Hallo
Bei der Überlegung, wie kann man unter PB ein Programm auf allen möglichen Rechnern gleich
schnell ablaufen lassen, habe ich den Befehl SetFrameRate als allererstes ausprobiert.
Er tut zwar das, was er soll, aber das Ergebnis ist eher suboptimal.
Ich weiss nicht wieviele Röhrenmonitore heutzutage im Einsatz sind, vermutlich wird aber
ein LCD Bildschirm häufiger anzutreffen sein. Ich weiss auch nur von den beiden Geräten,
die mir zum testen zur Verfügung stehen, dass LCDs mit einer Framerate von 60 arbeiten.
Röhrenmonitore können aber mit 75 und mehr Frames pro Sekunde arbeiten.
Ob dies mit LCDs auch möglich ist weiss ich leider nicht.
Wenn ich nun mein Programm mit SetFrameRate (60) auf einem LCD laufen lasse, funktioniert
alles wie es sollte. Anders sieht es da bei meinem Röhrenmonitor aus. Die Geschwindigkeit
ist zwar die gleiche, aber beim Scrollen fällt einem doch der eine oder andere Ruckler
unangenehm auf.
Dann habe ich folgendes versucht: Intern arbeitet das Programm mit 50 Frames und sollte
mit 60 und 75 Frames gleich schnell ablaufen. Erschwerend kommt ausserdem noch hinzu,
das nur der Flipbuffers(1) Befehl verwendet werden kann. Werte von 0 und 2 sind auf
dem Laptopdisplay und dem Röhrenmonitor zwar kein Problem, aber der LCD Monitor bekommt
arge Synchronisationsprobleme (Schade eigentlich). Vielleicht ein Treiberproblem?
Ich bin bei meiner Suche auch auf Danilo's Weg gestossen.(ein objekt soll auf allen
rechnern eine strecke von 200 pixeln gleich schnell zurücklegen @ 60, 75, 85 Hz)
Mir geht es aber eher darum, 30, 40 oder 50 erzeugte Bildschirme auf eben 60, 75 oder
auch mehr Frames zu verteilen.
bis denne
Thomas
			
			
									
									
						SetFrameRate & Flipbuffers
- KeyKon
- Beiträge: 1412
- Registriert: 10.09.2004 20:51
- Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
 PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
 Win10 x64 Home/Prof
 PB 5.30 (64bit)
- Wohnort: Ansbach
- Kontaktdaten:
Es ist relativ einfach, du musst einfach alle Bewegungen von der Zeit abhängig machen (ElapsedMilliseconds())
Das heißt ein Objekt bewegt sich zum Beispiel nich um 1 Pixel pro Frame, sondern um 60 Pixel pro Sekunde (wenn man es von 60 Hz ableitet...
Du musst dafür nur jeden Schleifendurchlauf die für den durchlauf benötigte Zeit ermitteln und dann die Bewegung entsprechend dieser Zeit und der gewünschten Bewegunggeschwindigkeit pro Sek regeln...
			
			
									
									Das heißt ein Objekt bewegt sich zum Beispiel nich um 1 Pixel pro Frame, sondern um 60 Pixel pro Sekunde (wenn man es von 60 Hz ableitet...
Du musst dafür nur jeden Schleifendurchlauf die für den durchlauf benötigte Zeit ermitteln und dann die Bewegung entsprechend dieser Zeit und der gewünschten Bewegunggeschwindigkeit pro Sek regeln...
(\/) (°,,,°) (\/)
						- 
				Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
zwei einfache Beispiele:
Billiges Game-Timing mit nativen PB-Mitteln
Animiertes Image im Gadget (ImageLayer, Timer)
das zweite ist zwar für eine Image-Animation im Fenster, aber der Millisekunden-Vergleich ist schön einfach zu sehen.
			
			
									
									Billiges Game-Timing mit nativen PB-Mitteln
Animiertes Image im Gadget (ImageLayer, Timer)
das zweite ist zwar für eine Image-Animation im Fenster, aber der Millisekunden-Vergleich ist schön einfach zu sehen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
						Der Weise weiß, dass er ein Narr ist.
Hallo KeyKon
> Das heißt ein Objekt bewegt sich zum Beispiel nich um 1 Pixel pro Frame,
> sondern um 60 Pixel pro Sekunde (wenn man es von 60 Hz ableitet...
Darüber hat Danilo ja einen sehr ausführlichen Beitrag verfasst den ich
bei meiner Suche entdeckt und in meinem Schreiben auch erwähnt habe.
Vielleicht denke ich auch nur in die falsche Richtung, aber mir geht es
ja eher darum, eine Menge von 50 bereits vorgefertigten Frames auf die
beim Rechner eingestellte Bildwiederholrate (60,75,90 etc) zu verteilen.
			
			
									
									
						> Das heißt ein Objekt bewegt sich zum Beispiel nich um 1 Pixel pro Frame,
> sondern um 60 Pixel pro Sekunde (wenn man es von 60 Hz ableitet...
Darüber hat Danilo ja einen sehr ausführlichen Beitrag verfasst den ich
bei meiner Suche entdeckt und in meinem Schreiben auch erwähnt habe.
Vielleicht denke ich auch nur in die falsche Richtung, aber mir geht es
ja eher darum, eine Menge von 50 bereits vorgefertigten Frames auf die
beim Rechner eingestellte Bildwiederholrate (60,75,90 etc) zu verteilen.
- 
				Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> mir geht es
> ja eher darum, eine Menge von 50 bereits vorgefertigten Frames auf die
> beim Rechner eingestellte Bildwiederholrate (60,75,90 etc) zu verteilen.
ja damit stößt du tatsächlich auf ein Problem und wirst mit Unregelmäßigkeiten leben müssen.
bei 50 vorgerenderten Animationsframes auf 60/75/90 wirst du einige Frames doppelt anzeigen müssen.
bei 60Hz werden 10 von 50 Frames zwei mal angezeigt, bei 75Hz 25 von 50 und bei 90 sind es 40 von 50.
eine Abhilfe wäre es, mit nur 30 vorgerenderten Frames zu arbeiten:
bei 60 werden alle 30 zweimal, bei 75 werden 15 zweimal und 15 dreimal, und bei 90 wieder alle 30 dreimal angezeigt.
da sind die abweichungen geringer, die Animation erscheint flüssiger.
			
			
									
									> ja eher darum, eine Menge von 50 bereits vorgefertigten Frames auf die
> beim Rechner eingestellte Bildwiederholrate (60,75,90 etc) zu verteilen.
ja damit stößt du tatsächlich auf ein Problem und wirst mit Unregelmäßigkeiten leben müssen.
bei 50 vorgerenderten Animationsframes auf 60/75/90 wirst du einige Frames doppelt anzeigen müssen.
bei 60Hz werden 10 von 50 Frames zwei mal angezeigt, bei 75Hz 25 von 50 und bei 90 sind es 40 von 50.
eine Abhilfe wäre es, mit nur 30 vorgerenderten Frames zu arbeiten:
bei 60 werden alle 30 zweimal, bei 75 werden 15 zweimal und 15 dreimal, und bei 90 wieder alle 30 dreimal angezeigt.
da sind die abweichungen geringer, die Animation erscheint flüssiger.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
						Der Weise weiß, dass er ein Narr ist.

