Konstante Framerate mit WaitTimer - Ja oder nein?

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Markus2

BeitragMo, Jan 19, 2004 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 19, 2004 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Markus2 hat Folgendes geschrieben:
Also Delay sollte die CPU entlasten und intern die API
Funktion Sleep benutzen .
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?

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

BeitragMo, Jan 19, 2004 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Markus2

BeitragMo, Jan 19, 2004 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragMo, Jan 19, 2004 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
 

Till

BeitragDi, Jan 20, 2004 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink jaja sicher kann
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 Wink
da ich nicht jedesmal pro main-loop nen flip() mache Smile

denke jeder hat so seine kleinen code gemeinheiten Wink) die
man sich so im laufe der jahre angewöhnt hat Wink

Markus2

BeitragDi, Jan 20, 2004 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, Jan 20, 2004 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Question Wie ist es aber mit der Performance? Da man ja viele zusätzliche Rechenoperationen in das Game einbauen muß, wenn man die Delta-Time-Methode nutzt, bremst das doch in zeitkritischen Abläufen schon etwas die Leistung, oder nicht? Auch wenn es simple Operationen sind, schliesslich summieren diese sich ja. Ist das spürbar oder kann man da getrost drüber hinwegsehen?

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

BeitragDi, Jan 20, 2004 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Shocked

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

TheShadow

Moderator

BeitragDi, Jan 20, 2004 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 20, 2004 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 21, 2004 13:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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

BeitragMi, Jan 21, 2004 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group