warum ruckelt der Ball?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Garfield

Betreff: warum ruckelt der Ball?

BeitragMo, Mai 10, 2004 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Crying or Very sad

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-BIT

Gast

BeitragMo, Mai 10, 2004 19:02
Antworten mit Zitat
Hmm...

FPS: 144

Kein ruckeln !

Toni

General Alex

BeitragMo, Mai 10, 2004 19:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 10, 2004 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 10, 2004 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Garfield hat Folgendes geschrieben:
es ruckelt ja auch bei keinem Waittimer (bei 61 fps)

Dann stimmt wahrscheinlich etwas mit deinem PC nicht.

Garfield

BeitragMo, Mai 10, 2004 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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-BIT

Gast

BeitragMo, Mai 10, 2004 19:11
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

BeitragMo, Mai 10, 2004 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
das hilft auch nix
irgendwas ist da oberfaul

Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad
 

HOT-BIT

Gast

BeitragMo, Mai 10, 2004 19:23
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

BeitragMo, Mai 10, 2004 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

BladeRunner

Moderator

BeitragMo, Mai 10, 2004 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 10, 2004 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 10, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Crying or Very sad Crying or Very sad Crying or Very sad

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-BIT

Gast

BeitragMo, Mai 10, 2004 20:05
Antworten mit Zitat
Hi !

Super ? Weiß nicht:

Fujitsu/Siemens C 991

Das ist mein Monitor.
Und auf optimal eingestellt.

Toni

Garfield

BeitragMo, Mai 10, 2004 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Mai 10, 2004 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Mai 10, 2004 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BladeRunner

Moderator

BeitragDi, Mai 11, 2004 7:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab dein Programm testweise von Timer auf ne millisecs()-Bremse umgestellt. Ergebnis ist dasselbe...
Seltsam, seeeeehr seltsam ... Shocked

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 ... Wink
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

BeitragDi, Mai 11, 2004 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mal ausprobiert -> ruckelt wirklich ein bischen
Vollbild umgestellt -> funktioniert perfekt
aktuelles Projekt: The last day of human being

Garfield

BeitragDi, Mai 11, 2004 10:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group