warum ruckelt der Ball?
Übersicht

![]() |
GarfieldBetreff: warum ruckelt der Ball? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiss nicht was ich falsch mache, aber der Ball ruckelt in regelmäßigen Abständen, besonders wenn man die taste "t" drückt, dann wird der Waittimer aktiviert
Blitz Plus, winXP P3 500 MHz. TFT 60Hz Bildwiederholrate FPS Anzeige = 61 Das Problem habe ich auf meinem anderen Rechner auch, allerdings nur, wenn ich mit Waittimer abbremse. Dort habe ich 85 Hz Bildrate, ungebremst läuft der Ball rund, bremse ich z.B. auf 60 FPS ab, ruckelts genauso. Ich hab der einfachheit halber für dieses Beispiel kein Image für den Ball genommen, mit Images siehts genauso aus... ![]() Code: [AUSKLAPPEN] Graphics 800,600
SetBuffer BackBuffer() Global BX Global BY =30 Global xspeed =2 Global yspeed =1 Global acc# = 3 Global timer1=CreateTimer(30) Global FPS ; für Zählung Global fpsr = 25 ; Zeitkonstante Timer = MilliSecs() Anfang = MilliSecs() While Not KeyDown(1) If MilliSecs() - timer >999 ; für FPS Messung FPSAnzeige = FPS Timer = MilliSecs() FPS = 0 EndIf Ballbewegung() Text 100,220,"FPS = "+FPSAnzeige Oval BX,BY,20,20,1 If KeyDown(20) Then WaitTimer(timer1) Flip Cls FPS = FPS+1 Wend End Function Ballbewegung() BX = BX + xspeed*acc BY = BY + yspeed*acc If BX >=780 xspeed = -2 yspeed = -1 End If If BX<= 20 xspeed = 2 yspeed = 1 End If End Function |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hmm...
FPS: 144 Kein ruckeln ! Toni |
||
![]() |
General Alex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schon klar, dein Timer ist auf 30 eingestellt, versuch's einmal mit 100. Das menschliche Auge nimmt zwar höchstens 25 FPS (oder sowas) war, aber bei 30 ruckelt es schon, weil das ganze ja noch von der Grafikkarte verarbeitet werden muss usw. | ||
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
es ruckelt ja auch bei keinem Waittimer (bei 61 fps)
wenn ich FLIP(0) mache habe ich 633 fps drücke ich dann "t" (Waittimer 60) dann ruckelts wieder, da stimmt doch was nicht.... |
||
- Zuletzt bearbeitet von Garfield am Mo, Mai 10, 2004 19:07, insgesamt einmal bearbeitet
![]() |
General Alex |
![]() Antworten mit Zitat ![]() |
---|---|---|
Garfield hat Folgendes geschrieben: es ruckelt ja auch bei keinem Waittimer (bei 61 fps)
Dann stimmt wahrscheinlich etwas mit deinem PC nicht. |
||
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich werds zu Hause nochmal mit BB2D probieren, vieleicht hat BPlus ja ne Macke
wenn ich FLIP(0) mache habe ich 633 fps drücke ich dann "t" (Waittimer 60) dann ruckelts wieder, da stimmt doch was nicht.... |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Noch was: Mach das FLIP BEVOR du WaitTimer aufrufst ! Ansonsten kanns mehr ruckeln. Bei Flip 0 habe ich 1763 FPS. Toni |
||
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hilft auch nix
irgendwas ist da oberfaul ![]() ![]() ![]() ![]() |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Mal konkret: Was verstehst du unter >RUCKELN< ? BX = BX + xspeed*acc heißt: bx=bx+ (2*3) Also um 6 Pixel verschieben BY = BY + yspeed*acc heißt: by=by+ (1*3) Also um 3 Pixel verschieben Und das da nun ein leichter Treppen-effekt entsteht, ist ja klar. Toni |
||
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich hab das gleiche geruckel.
Der Ball fliegt im "normaltempo" dann bleibt er eben kurz wo hängen dann wieder weiter. Hab auch ne 100% CPU auslastung. Liegt glaube ich an BB denn auch mit einem .gif Bild hab ich deinen Code eben getestet - genau das selbe ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
also bei mir entsteht auch der Eindruck des Ruckelns wenn ich um 60 FPS fahre. Ich denke jedoch dass das Problem wirklich eher am menschlichen Auge liegt- der Weiße Punkt mit 60 FPS liegt halt noch unter der Wahrnehmungsgrenze von ca 85 Hz.
Mit ein Grund dass sich Fernseherhersteller an 100Hz-Screens dumm und dusslig verdienen. ab ca 80fps hab ich keine Probleme mehr... |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Gossi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könnte es an acc liegen, da es ein float ist? Ist nur eine Idee, aber ich schon so manche kuriose Dinge erlebt, nur weil einige Variablen Ints und andere Floats waren. Setze mal testweise alle Variablen, die mit acc in Berührung kommen als Float. | ||
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind. |
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also auf meinem @home Rechner mit 85 Hz Bildrate läufts ungebremst absolut sauber. ich habe timer1 = 60 gewählt.
drücke ich dann "t" ruckelts. ![]() ![]() ![]() Es funktioniert immer dann, wenn die Bremse die Bildwiderholrate ist, stelle ich z.B. den Monitor auf 60Hz, siehts ungebremst genauso sauber aus, ebenso bei 70 Hz. sobald eine Waittimer bremse drinn ist funktioniert das ganzer überhaupt nicht das ist dich nicht normal oder? wie macht HotBit das mit seinen 144 FPS? das muss doch ein SuperGraphiker Monitor Display sein oder?? |
||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi !
Super ? Weiß nicht: Fujitsu/Siemens C 991 Das ist mein Monitor. Und auf optimal eingestellt. Toni |
||
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
ok ich weiss schon mal ein bischen mehr,
HotBits Grafikkarte erkennt den Monitor und kann bei 800x600 tatsächlich 140 HZ scannen Ich kriege meine Leadtek A180 nicht dazu überredet eine höhere Frequenz (max 100 hZ kann mein Monitor) bei geringer Auflösung zu machen. Dia kann dann höchstens verdoppeln (also 170 Hz, datt kann der Monitor ja nich). Also auch bei Grafikfenster 800x600 85 Hz. OK soweit so gut, das erklärt aber immer noch nicht dieses Ruckeln bei der WaittimerBremse ich habs in B2D und BPlus probiert, es ist immer das gleiche. OK jetzt habe ich korrekten Bildschirmtreiber (Acer 99SL) und das Gnaze läuft nun im Free Modus mit 100FPS aber das Gleiche drücke ich t wirds ruckelig @HotBit: was passiert denn wenn du die "t" Taste drückst????????? jetzt da ich mit 100 Hz arbeite fällt mir auf, wenn ich den Timer auf 50 stelle, wirds wieder sauber, allerdings sehe ich dann 2 Halbbälle (so exakt um den Bewegungswert versetzt verzahnt), das deutet auf die 2 Halbbilder hin???? So jetzt hab ichs auch noch in B3D getestet. Liegt nicht am Compiler, ist überall das Gleiche!!!!!! Hängt offensichtlich mit dem Teiler zur Bildwiederholfrequenz zusammen. Anscheinend wartet das BlitzProg nicht immer gleichmäßig auf den Timer oder den 0 Durchgang und damit kommt eine unrgelmäßigkeit zustande. Wenn der Waittimer nicht mit dem Videotakt synchron läuft könnte das so sein, obwohl das eigentlich im millisekundenbereich liegen sollte, aber in der Summe bei z.B. 10 unützen Millisecs pro FRame? Ich könnte mir vorstellen, das das mit directx auch zusammenhängt oder meiner GraKa oder den Treibern |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Habs mal probiert,
läuft mit 144 FPS ruckelfrei (96Khz Monitor ) bei 30 FPS scheint es so als wenn ein Schattenbild mit läuft oder restleuchten, könnte am Kontrast liegen , aber richtiges ruckeln bzw. stottern hab ich nicht! Bei Flip 0 rennt das 3200 FPS |
||
[BB2D | BB3D | BB+]
|
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Rallimen:
bei 60 FPS sieht es also gut aus bei dir?? Geforce 4 MX440 hab ich doch auch mit 8xAGP Treiber sind vom Dezember 2003 |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab dein Programm testweise von Timer auf ne millisecs()-Bremse umgestellt. Ergebnis ist dasselbe...
Seltsam, seeeeehr seltsam ... ![]() EDIT: Denke die Lösung zu haben (also das Warum geklärt, keine Abhilfe geschaffen...): der Monitor zieht (in meinem Fall) stur seine 85 Wiederholungen/Sekunde durch. D.h. in ungebremstem Betrieb ist jeder Bildwechsel mit einer neuen Ballposition verbunden. Wenn jetzt jedoch die Bremse greift (und nicht zufällig ein Vielfaches bzw. ein Glatter Bruch der Wiederholfrequenz ist) wird das Bild zB. 3mal an einer Position und dann nur 2 mal an der nächsten gezeigt. Da sich an der 1/85 Sekunde zwischen den einzelnen Bildwechseln nichts ändert, kommt es zum "ruckeln" EDIT2: Theoretische Abhilfe: die Bewegung anhand der ermittelten aktuellen FPS an die Pausen anpassen, sprich: wenn 2 Zyklen vergehen bis Flip aufgerufen wird -> doppelte Bewegungsweite etc. Hab ich jedoch noch nicht probiert (weils arg früh ist und ich ne beschissene Nachtschicht hinter mir hab). Gute Nacht ... ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab mal ausprobiert -> ruckelt wirklich ein bischen
Vollbild umgestellt -> funktioniert perfekt |
||
aktuelles Projekt: The last day of human being |
![]() |
Garfield |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau das ist es BladeRunner, abhängig vom Teilverhältnis Bildrate/WaitTimer kommt es zu "Ungenauigkeiten" und alle 2 oder drei Frames wird eine Position 1 Frame länger dargestellt als die Anderen.
Mein Monitor läuft jetzt mit 100Hz, ungebremst und bei einem Timerwert von 50 (also Hälfte) bewegt sich der Ball absolut gleichmäßig. Ich sehe tatsächlich auch nur 2 Lösungen: Waittimer und Delay sind zu vermeiden 1. Vorgabe Bildwiederholfrequenz(das wird bei den meisten Spielen ja auch so gemacht) - feste Vorgabe vom Programm ans System welche Bildrate verwendet wird, dadurch können solche Artefakte durch ungleiche Wartezeiten beim Ausbremsen vermieden werden 2. Laufzeitermittlung anhand einer Zeitmessung wie lange die Hauptschleife läuft, wird eine Konstante gesetzt, mit der sämtliche Bewegungsabläufe multipliziert werden um so sicherzugehen, das die Bewegungen auf allen Rechnern gleich laufen |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group