Konstante Framerate mit WaitTimer - Ja oder nein?
Übersicht

![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also Delay sollte die CPU entlasten und intern die API
Funktion Sleep benutzen . Natürlich merkt man das erst wenn ca. min 4 ms geschlafen wird . Für Netzwerk spiele muß man dann die Bewegung synchronisieren das alle Spieler ich sagmal in 1 Sekunde den selben Weg zurück legen . Also z.B. x#=x#+speedx# * DeltaTime# Wobei man für DeltaTime ein Limit setzen muß falls mal das Programm auf einer 2 MB Karte nur 5 FPS liefert !? Meine Programme habe ich meist auf 50 oder mehr FPS laufen . Je nach dem wieviel überhaupt möglich ist . Also erstmal messen was man an reserve hat und nicht übertreiben weil es Leute gibt wo der PC langsamer ist . |
||
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Markus2 hat Folgendes geschrieben: Also Delay sollte die CPU entlasten und intern die API
die API-funktion sleep bremst die anwendung KOMPLETT aus, keine messages, kein nix kommt da mehr an oder geht weg. wer um alles in der welt benutzt das?
Funktion Sleep benutzen . irgendwie scheinen sich hier viele krampfhaft gegen fps-abhängige berechnungen zu wehren (jetzt mal rein im single-player). warum? bisher kam kein wirklich vernünftiges argument was dagegen spricht. @ST wegen punkt 2: das stimmt nicht so ganz 100%ig. der witz an der sache ist nämlich, dass das spiel dann nicht _ruckelt_, sondern tatsächlich _langsamer_ läuft. wie in nem bullet-time-modus sozusagen. erst wenn die frames unter ca 20 fallen, wird man merken, dass es _sehr_ unflüssig läuft. da hier viele aber anscheinend eine framebremse bei 50 oder 60 fps ansetzen, sind alle die, bei denen der rechner nur vielleicht 35 fps liefert, angearscht (bzw haben auf der anderen seite nen kleinen vorteil *g*) |
||
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@MasterK
Versuchs mal mit und ohne Delay und DebugModus Aus . Diese 4 ms reichen damit die anderen Anwendungen schön weiter laufen . Werden keine Messages verarbeitet = nix geht mehr . Wenn die Maus bewegt wird werden ja auch Messages gesendet und verarbeitet unter Windows . Habs jetzt nur im Fenster Modus ausprobiert und im Vollbild spielt es eh keine große Rolle weil alles über DirectX läuft . Das die API-funktion sleep die anwendung KOMPLETT ausbremst stimmt nicht , sie gibt den anderen Tasks was an Zeit ab wenn man was über hat . Dafür werden (kann man) auch noch Prioritäten festlegen zum Process und zu jedem Thread der läuft . Code: [AUSKLAPPEN] Graphics 640,480,16,2 While Not KeyHit(1) Cls Delay 4 Wend End |
||
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry, aber ohne BB kann ich das schlecht probieren.
mir gings auch nicht um wait oder delay, sondern um framebremse und fps-abhängige bewegung. das thema ist gleich, egal ob du bb, c++, vb, delphi oder sonstwas benutzt. wegen der api-funktion sleep sagt die msdn das: Zitat: The Sleep function suspends the execution of the current thread for a specified interval. ... You have to be careful when using Sleep and code that directly or indirectly creates windows. If a thread creates any windows, it must process messages. Message broadcasts are sent to all windows in the system. If you have a thread that uses Sleep with infinite delay, the system will deadlock.
wenn man diese funktion nur 4 ms (oder 10 oder 40 oder wie auch immer) nutzt, macht das sicher nich viel aus, aber es ist an sich unsinnig, dass diese funktion überhaupt verwendet wird. alle anderen programmierer kommen doch auch ohne aus? berechnungen anhand der fps sind doch nun wirklich nicht unmöglich schwer, da findet man genug material im internet. je eher man sich damit mal auseinandersetzt, desto besser. man kann doch schliesslich nur lernen. aber das muss man natürlich auch wollen ![]() |
||
Till |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sorry das ich jetzt wieder einsteige.
@masterk also ich lasse so oder so meine games nicht schneller als 50 fps laufen die eine variable die ich nur so hoch zählen lasse ist für mich halt "genauer" als wenn ich da nur nen integer wert als fps habe ![]() auch fps als float anzeigen lassen aber zum debuggen fand ichs ganz praktisch zusehen wieviele loops pro sec laufen als nur die fps mir anzeigen zulassen ![]() da ich nicht jedesmal pro main-loop nen flip() mache ![]() denke jeder hat so seine kleinen code gemeinheiten ![]() man sich so im laufe der jahre angewöhnt hat ![]() |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@MasterK
Du meinst also das wir Programme ohne Bremse schreiben sollen !? Das Problem ist ja das man nur die vergangene Zeit messen kann und nicht die Zeit die gerade je nach Logik in den Funktionen gebraucht wird und das wird zu leichtem ruckeln führen . Die Sleep oder Delay Funktion ist nur notwendig wenn man intensive Schleifen hat das die anderen Programme auch noch was machen können . Die 4 ms die ich meine reicht Windows schon um die Events zu verarbeiten . Wie gesagt macht nur Sinn im Fenster Modus . Bei VB wird meist DoEvents benutzt damit das Programm die eigenen Events abarbeitet was aber zu Chaos führt wenn man nicht weiß was man da macht . |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also kann man ZUSAMMENFASSEND sagen, daß die Delta-Time-Methode zwar bei kleineren Games nicht zwingend nötig ist, aber dennoch die exakteste Methode ist, vor allem bei größeren Projekten und Multiplayer-Games?
![]() Da ich noch nicht so lange mit Blitz arbeite, habe ich eben noch keine direkte Erfahrung, wie viel Performance Blitz bietet, und wie vorsichtig man hier sein muß, um die Ressourcen nicht unnötig auszureizen. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
merkwürdig, dass das programmierer anderer sprachen immer ohne probleme hinbekommen? auch mit vb (und doevents), ohne, dass da "chaos" passiert.
und die framerate ermittelst du für einen _kompletten_ frame und nicht für einzelne funktionen. is doch egal, ob eine funktion länger brauch als andere. im übrigen trifft das problem mit der schwankenden framerate genauso auf programme mit framebremse zu. sollte als welchen grund auch immer die framerate (bzw die dauer der berechnungen für einen frame) unter eure pauschal festgesetzte grenze fallen, habt ihr das gleiche problem. nur dass ein programm mit variabler framerate darauf reagieren kann, euer wird nur langsamer... dass sich leute so vehement gegen diese gebräuchliche technik wehren hab ich echt noch nie gesehen ![]() edit: bezog sich auf den beitrag von markus edit2: die berechnungen sind wirklich vernachlässigbar. meistens sind das ja addition bzw multiplikation, die sowieso recht schnell gehen. muss man immer aufwändige berechnungen durchführen, wäre das anlegen einer tabelle (zB bei sinus-berechnungen) evtl sinnvoll |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
in irgendein neues spiel wurde framebremse eingebaut - glaube Unreal oder Quake - und zwar mit der begründung: Damit langsamere Rechner nicht benachteiligt werden - mit schnelleren PC's können die Spieler besser reagieren und sich schnelelr bewegen etc...
na dann... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
bei doom3 wars. diese begründung war reichlich merkwürdig. die framebremse liegt bei 60fps, und es macht für reaktionen nicht sehr viel unterschied, ob das spiel bei 60 oder 120 fps läuft. da sind die unterschiede zwischen 30 und 60 fps schon deutlicher. leute mit schwächeren rechnern haben also nix davon.
im übrigen ist das eine framebremse wie von shadowturtle angesprochen: die bewegenungen werden in abhängigkeit von der framebremse berechnet, aber es werden maximal 60 fps zugelassen. im endeffekt geht das also mehr in richtung fps-abhängige bewegung aber es gibt durchaus auch professionelle spiele mit framebremse, zB baldurs gate. ich glaube aber, da wurde das hauptsächlich wegen dem multiplayer genutzt, bzw ist die KI an die framerate gekoppelt (könnte man zumindest anhand der einstellungen vermuten) |
||
![]() |
Markus2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
OT:
MasterK hat Folgendes geschrieben: ... auch mit vb (und doevents), ohne, dass da "chaos" passiert....
Fällt auch nicht direkt auf , nur wenn man es weiß kann man gezielt ein Prog. zum abstürzen bringen ![]() z.B. Wenn man einen Button anklickt , dort eine lange Funktion läuft mit DoEvents und der Button nicht ausgeschaltet wurde nach dem klick . Also kann man die Funk. erneut starten ohne das sie zu Ende war . Beim Menü wird es kritsich wenn die Maustasten prellen und der Menü punkt nicht ausgeschaltet wird in verb. mit langen Funk. und DoEvents . |
||
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das ist nun aber kein vb-alone problem. kann dir mit anderen sprachen auch passieren. dagegen hilft ein guter programmentwurf.
das hat jetzt aber nich so sehr mit den fps zu tun |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group