Framerate begrenzen mit GetTickCount und Sleep nicht gut?



  • man trennt es einfach deshalb, weils schlicht sinnvoller ist.

    eine logikaktualisierung von 85 mal in der sekunde macht keinen sinn, denn kein mensch kann so schnell das spiel steuern, oder ist in der lage so viele änderungen pro sekunde wahrzunehmen. selbst 60 oder 40 mal ist schon fast zu viel. 25 reicht aus. ABER es ist nicht egal, ob man nur 40 oder 60 GraphicFramesPS hat, denn auf einem monitor mit 100 hertz sehen 60 oder 80 fps einfach scheisse aus. man sollte immer mehr fps als die bildwiederholfrequenz haben, damit die grafik auch gut aussieht. grafik und logik sind zwei verschiedene dinge und sollten deshalb auch getrennt gehandhabt werden. ausserdem kann die logik unter umständen bei 100 hertz ZU rechenintensiv sein (z.b. wenn man 10000 einzelobjekte hat und sich alle in jedem frame ändern). da macht es einfach keinen sinn sie so oft neu zu berechnen (weil man einen 3 gigahertz rechner bräuchte)

    einen normalen mainloop würde ich so realisieren.

    do {
      if (Timer.GetMilliSeconds()>=(1000/25))
      {
        Timer.StartNewTimeFrame();
        UpdateLogic(); //wird nur alle 25 mal in der sekunde ausgeführt
      }
    
      RenderScene(); //fullspeed, also ohne bremse
      SwitchBuffers();
    } while(!Quit);
    

    wenn dann der rechner alles schneller als 25 mal in der sekunde berechnen kann, dann wird das halt gemacht und die logik wird ganz normal gebremst. wenn der rechner zu langsam ist, dann wird alles auf einmal langsamer. ich halte nichts von einer multiplikation mit der vergangegen zeit auf die bewegungen. das führt nur zu ruckeligen und sprunghaften bewegungen, und macht das spiel unter umständen unspielbar (falls das programm ein spiel ist). aber auch wenn der rechner das programm schnell genug berechnen kann, führt das zu rucklern (wenn auch nur marginal), da jeder einzelne frame nicht immer 100,000000000% gleichschnell berechnet wird. zum einen weil sich einfach zuviel pro frame ändert und dadurch die rechenzeit schwankt, aber auch deshalb, weil es noch andere prozesse gibt, die auch unterschiedliche rechenzeiten haben.

    letzen endes ist es aber geschmacksache! in vielen spielen wird die erste variante genommen, denn wenn man dort einen zu lahmen rechner hat, bewegt sich alles in zeitlupe und nicht in sprüngen. (hat schon mal jemand starcraft mit 4000 zerglingen auf nem 600mhz rechner gezockt? 😃 )



  • Original erstellt von KXII:
    [QB]
    eine logikaktualisierung von 85 mal in der sekunde macht keinen sinn, denn kein mensch kann so schnell das spiel steuern, oder ist in der lage so viele änderungen pro sekunde wahrzunehmen. selbst 60 oder 40 mal ist schon fast zu viel. 25 reicht aus. ABER es ist nicht egal, ob man nur 40 oder 60 GraphicFramesPS hat, denn auf einem monitor mit 100 hertz sehen 60 oder 80 fps einfach scheisse aus. man sollte immer mehr fps als die bildwiederholfrequenz haben, damit die grafik auch gut aussieht.

    mainloop würde ich so realisieren.

    [QB]

    Naja, das mit mehr Frames als die Hertzzahl glaub ich eher nicht dran. Ein normaler fernseheher hat 50 oder 100 Hertz, aber es werden nur 25 Bilder pro Sekunde gezeigt. Auerdem wird ein Frame ja in den Bildschirmspeicher gezeichnet, und idesen sendet die Grafikkarte halt je nach Wiederholfrequenz an den Monitor. Außerdem ist bei mir die FPS von der Wiederholfrequenz des Monitors abhängig. Ich schaff bei mir keine schnellere FPS als WIederholrate. Bei 85 Hertz kommen bei mir 85 FPS, bei 65 Hertz nur 62 FPS.
    Ich versteh trotzdem nicht, wieseo man mehr Logicticks als FPS braucht, wenn was in der logik verändert wird, muss es doch auf den Bildschirm gezeichnet werden. Ich meine, wieso soll man ein Objekt zweilmal veschieben, wenn es nru einmal gezeichnet wird? Dan kann man da sObjekt doch einfach einmal um das doppelte verschieben und dann zeichnen, oder?


  • Mod

    damit die logic nicht durcheinander kommt, z.B. bei der collisionsberechnung, bei der positionierung der objekte... wenn ein objekt immer 4 einheiten in x verschoben wird pro tick,könnte es bei 24fps anstatt 25logicticks zu winzigen ungenauigkeiten kommen, die auch noch unnütz wären, anstatt die bewegung * timedelta zu rechnen, kann man vom gleichen delta ausgehen und sparrt einiges an berechnungen

    und in extrem fällen:

    angenommen da ist ne wand mit einer tür, die dann in einer sekunde aufgeschlagen wird und du berechnest mit jedem echtem frame die logic, da die tür aufgeht, öffnest du ein protal und es müssen einige dinge geladen werden und die fps fällt kurz auf 1fps, nämlch die zeit die die tür aufgeht.
    du berechnest dafür dann kolisionen für deinen avater der vor der tür stand, normalerweise hätte die tür nicht durch ihn durchgehen können, aber weil du einmal

    ----0-----0-----
    X
    und dann
    ----0-----0-----
    /
    / X
    /
    /

    hast, bemerkst du selbst wenn du zwischen den vertices rays ziehst, vielleicht keine kollision.

    das ist an sich nicht superschlimm, aber es ist eben unvorhersehbar, denn bei der nächsten tür schon könnte alles im cache sein und der typ läuft da erst ein paar mal gegen und wundert sich, weshalb die "schei**" tür nicht aufgeht.
    das känn bei größeren sachen ganz schön ärgerlich sein, z.B. eine zuschnappende falle die nen gegner töten sollte und wegen nachladen oder sonstiger lustigkeiten ihn übersprang.

    ich hab schonma spiele gespielt, bei denen die HD plötzlich wieder anging und als die an war, befand ich mich irgendwo außerhalb der level, bin runtergefallen und war tod..., sicher kann man das abfangen, aber nicht vorhersehen.

    rapso->greets();



  • @thetoast

    ich kann dir leider keine physikalische erklärung dafür geben, warum das so ist, aber bei mir ist das so mit den mehr fps als hertz. für mich sieht animierte grafik einfach besser aus, wenn sie mehr fps hat als die bildwiederholrate des monitor. das bezieht sich natürlich nur auf so kleinigkeiten wie ruckler oder sauberes scrolling. die grafik selber wird nicht besser (ist aber klar...). vielleicht fällt dir das einfach nur nicht auf, oder du siehst keinen unterschied, weil du noch nie so genau hingeschaut hast. keine ahnung wieso das bei mir so ist, es ist aber so, und du kannst mir das auch ruhig glauben.

    wieso schafft dein rechner nicht mehr fps als hertz? wenn du keine spezialhardware hast, dann sollte das bei dir auch gehen. was passiert denn, wenn du ein directx sdk demo startest, das normalerweise so 300-400 fps hat?

    zum thema mehr logikticks als fps. du hast recht. es macht im normalfall keinen sinn öfters die logik zu berechnen, als sie dargestellt wird. in extrem fällen vielleicht schon, aber die sind meistens sehr exostisch. zum beispiel, wenn man in echtzeit eine hardware abtastet. wenn dann die grafikarte die daten nur mit 1 frame pro sekunde darstellen kann, es aber noch andere "einheiten" gibt, die die daten öfters benötigen, als nur einmal pro sekunde, dann sollte man einen extra thread nur für die logik benutzen und diesen dann die logik öfters als einmal pro sekunde berechnen lassen. sonst würde man ja den gesamten programmablauf durch die grafikdarstellung begrenzen.

    @rapso

    "damit die logic nicht durcheinander kommt, z.B. bei der collisionsberechnung, bei der positionierung der objekte... wenn ein objekt immer 4 einheiten in x verschoben wird pro tick,könnte es bei 24fps anstatt 25logicticks zu winzigen ungenauigkeiten kommen, die auch noch unnütz wären, anstatt die bewegung * timedelta zu rechnen, kann man vom gleichen delta ausgehen und sparrt einiges an berechnungen

    warum sollte, egal wo, logik durcheinander kommen? warum sollte es bei 24 fps anstatt 25 logikticks zu ungenauihkeiten kommen? für mich hört sich das schwachsinnig an (sorry). denn wenn ein rechner nicht mehr als 25 fps berechnen kann, dann wird halt alles einfach langsamer berechnet und das spiel fangt an in zeitlupe abzulaufen. aber die logik arbeitet nach wie vor genauso und wenn man es richtig programmiert, dann ergeben sich auch keine probleme bei der kollision oder so und es kommt auch nichts durcheinander!

    ..., bemerkst du selbst wenn du zwischen den vertices rays ziehst, vielleicht keine kollision.

    warum sollte man keine kollision erkennen? wie ich schon oben sagte, spielt das keine rolle. wenn doch dann ist es einfach schlecht programmiert, weil es nicht alle fälle abdeckt, die eintreten können.

    deshalb auch folgendes:

    ich hab schonma spiele gespielt, bei denen die HD plötzlich wieder anging und als die an war, befand ich mich irgendwo außerhalb der level, bin runtergefallen und war tod..., sicher kann man das abfangen, aber nicht vorhersehen.

    wofür sollte man es auch vorhersehen oder abfangen? wenn eine hd in aktion tritt und daten von ihr geladen werden, dann wird das spiel halt etwas langsamer oder es bleibt sogar ganz stehen (je nach programmierung), bis die zugriffe fertig sind, das ändert aber nichts an der berechenbarkeit von kollisionen. sorry, ich sehe hier keine probleme.

    [ Dieser Beitrag wurde am 02.07.2003 um 01:18 Uhr von KXII editiert. ]



  • Original erstellt von KXII:
    für mich sieht animierte grafik einfach besser aus, wenn sie mehr fps hat als die bildwiederholrate des monitor...vielleicht fällt dir das einfach nur nicht auf, oder du siehst keinen unterschied, weil du noch nie so genau hingeschaut hast. keine ahnung wieso das bei mir so ist, es ist aber so, und du kannst mir das auch ruhig glauben.

    Das erscheint mir einfach nicht logisch, kannst Du das irgendwie untermauern?

    Original erstellt von KXII:
    wieso schafft dein rechner nicht mehr fps als hertz? wenn du keine spezialhardware hast, dann sollte das bei dir auch gehen. was passiert denn, wenn du ein directx sdk demo startest, das normalerweise so 300-400 fps hat?

    Ich sitze hier an einem 650MHz Rechner mit einer alten GeForce256, ich bin mehr als zufrieden wenn ich Spiele mit 25FPS laufen lassen kann, obwohl ich Deiner Logik zufolge erst ab 90FPS zufrieden sein sollte. (Mein Monitor läuft mit 90Hz bei 1280x1024.)

    Original erstellt von KXII:
    zum thema mehr logikticks als fps. du hast recht. es macht im normalfall keinen sinn öfters die logik zu berechnen, als sie dargestellt wird.

    Doch, macht es (zumindest im weitesten Sinne). 😉
    Wenn diverse Egoshooter nicht seltener rendern würden als die Spiellogik überprüft wird dann gäbe es keine ruckelnden Spiele - es würde einfach alles im Zeitlupentakt ablaufen was - wenn man es sich genau überlegt - wohl noch ungünstiger wäre.



  • Original erstellt von KXII:
    warum sollte, egal wo, logik durcheinander kommen? warum sollte es bei 24 fps anstatt 25 logikticks zu ungenauihkeiten kommen? für mich hört sich das schwachsinnig an (sorry). denn wenn ein rechner nicht mehr als 25 fps berechnen kann, dann wird halt alles einfach langsamer berechnet und das spiel fangt an in zeitlupe abzulaufen. aber die logik arbeitet nach wie vor genauso und wenn man es richtig programmiert, dann ergeben sich auch keine probleme bei der kollision oder so und es kommt auch nichts durcheinander!

    Lies Dir diesen Absatz noch einmal durch und Du wirst Deinen Denkfehler entdecken - rapso hat durchaus auch Ahnung von solchen grundlegenden Sachen, denk zumindest mal über seine Aussagen nach! 🙂



  • @nman

    "Das erscheint mir einfach nicht logisch, kannst Du das irgendwie untermauern?"

    ich schrieb, daß ich dafür keine genaue erklärung habe. es ist halt so. glaube es oder nicht, mir egal.

    "Ich sitze hier an einem 650MHz Rechner mit einer alten GeForce256, ich bin mehr als zufrieden wenn ich Spiele mit 25FPS laufen lassen kann, obwohl ich Deiner Logik zufolge erst ab 90FPS zufrieden sein sollte. (Mein Monitor läuft mit 90Hz bei 1280x1024.)"

    wenn das so ist, dann ist das schön für dich. kennst du den satz aus dem film matrix: "unwissenheit ist ein segen" ? ausserdem sagte ich nie das ich unzufrieden bin. ich sagte nur es sieht besser aus!

    Doch, macht es (zumindest im weitesten Sinne).

    genau meine rede, wenn das "zumindest im weitesten sinne" dazugenommen wird. im normalfall nicht. falls du das anders siehst, dann bitte eine genaue erklärung, da dies meine vorstellungskraft übersteigt.

    Wenn diverse Egoshooter nicht seltener rendern würden als die Spiellogik überprüft wird, dann gäbe es keine ruckelnden Spiele ...

    übersetzt heisst das:

    Wenn diverse Egoshooter öfters oder genauso schnell rendern würden als die Spiellogik überprüft wird, dann gäbe es keine ruckelnden Spiele ...

    genau meine rede.

    ... - es würde einfach alles im Zeitlupentakt ablaufen, was - wenn man es sich genau überlegt - wohl noch ungünstiger wäre

    wieso denn das? wenn die grafik öftes gerendert wird als die logik neuberechnet wird, wieso sollte dann alles im zeitlupenmodus ablaufen? 😕

    Lies Dir diesen Absatz noch einmal durch und Du wirst Deinen Denkfehler entdecken - rapso hat durchaus auch Ahnung von solchen grundlegenden Sachen, denk zumindest mal über seine Aussagen nach!

    ich habe mir den absatz nochmal durchgelesen, aber ich erkenne keinen denkfehler. meine programme laufen ohne logikfehler, egal wieviel frames sie haben. bei zuwenig frames wird alles langsamer, aber das ändert, wie gesagt, nichts an der berechenbarkeit von kollisionen. wenn du unbedingt ein programm schreiben willst, das auch bei wenigen frames pro sekunde die sprites immer gleichschnell über den bildschirm laufen (eher springen) lässt, und du dann irgendetwas programmierst das fehlerfaht berechnet wird, dann ist das dein problem. aber mit einer sinnvollen programmierung hat das nichts zu tun.

    ich habe nie gesagt, das ich besonders viel ahnung von dem gebiet habe, oder das rapso wenig ahnung davon hat. ich kann mich auch irren, und wenn das so sein sollte, dann sag mir wie es richtig ist und ich akzeptiere es. ich höre hier oft nur anschuldigungen, aber keine GENAUEN lösungsvorschläge.

    aber zurück zum thema. ich kann einfach nicht erkennen wo das problem ist etwas mit einem timer zu syncronisieren.

    while(!Quit)
    {
      if (Timer.GetMilliseconds()>=TimeSpan)
      {
        Timer.Reset();
        DoSomething; 
      }
    }
    

    was ist daran falsch oder unlogisch und wieso sollte es probleme geben, wenn "DoSomething" mehr zeit benötigt als TimeSpan?

    [ Dieser Beitrag wurde am 02.07.2003 um 03:02 Uhr von KXII editiert. ]



  • @nman

    da fällt mir gerade noch was auf:

    wieso beziehst du diesen satz auf dich selbst

    "Original erstellt von KXII:
    wieso schafft dein rechner nicht mehr fps als hertz? wenn du keine spezialhardware hast, dann sollte das bei dir auch gehen. was passiert denn, wenn du ein directx sdk demo startest, das normalerweise so 300-400 fps hat?"

    und gibst das als antwort:

    "Ich sitze hier an einem 650MHz Rechner mit einer alten GeForce256, ich bin mehr als zufrieden wenn ich Spiele mit 25FPS laufen lassen kann, obwohl ich Deiner Logik zufolge erst ab 90FPS zufrieden sein sollte. (Mein Monitor läuft mit 90Hz bei 1280x1024.)"

    der vorherige abschnitt war eindeutig auf "thetoast" bezogen, weil er sagte, daß er nie mehr fps hat als seine bildwiederholfrequenz. und weil ich mir das nicht vorstellen kann, wollte ich von ihm wissen wieso das so ist.


  • Mod

    Original erstellt von KXII:
    **
    @rapso

    warum sollte, egal wo, logik durcheinander kommen? warum sollte es bei 24 fps anstatt 25 logikticks zu ungenauihkeiten kommen? für mich hört sich das schwachsinnig an (sorry).
    **

    das macht nichts, ich erklär's dir gerne, jeder hat das recht wat zu lernen 😉

    weil durch winzige ungenauigkeiten bei z.B. winkeln, die durch verschiedene divisoren auftretten (25 oder 24) bei der aufaddierung derer die winkel schon einges falsch sein können, wenn sich dann ein objekt 500einheiten weit bewegt, kann soeine kleine winkelungenauigkeit in einigen einheiten unterschied enden.

    Original erstellt von KXII:
    **
    warum sollte man keine kollision erkennen? wie ich schon oben sagte, spielt das keine rolle. wenn doch dann ist es einfach schlecht programmiert, weil es nicht alle fälle abdeckt, die eintreten können.
    **

    wenn du meinem beispiel mit der sich öfnenden tür folgen würdest, wüstest du dass die tür aufging und dabei ne gewisse rotation durchgeführt hat, wenn die framezahl total einbricht, dann kannst du das nicht mehr richtig berechnen, da du zwischen zwei positionen linear interpolierst, die punkte aber in wirklichkeit eine kreisbewegung hätten machen müssen, was zu einer kollision geführt hätte mit dem davor stehendem spieler.

    Original erstellt von KXII:
    **
    wofür sollte man es auch vorhersehen oder abfangen? wenn eine hd in aktion tritt und daten von ihr geladen werden, dann wird das spiel halt etwas langsamer oder es bleibt sogar ganz stehen (je nach programmierung), bis die zugriffe fertig sind, das ändert aber nichts an der berechenbarkeit von kollisionen. sorry, ich sehe hier keine probleme.

    **

    dafür abfangen, damit man nicht stumpf immer ... Bewegung*timedelta rechnet, sonst wird es beim kleinem aussetzer im system passieren, dass ein spieler extrem weit deplaziert wird

    rapso->greets();



  • GOTT SEI DANK. ich glaube ich habe gelernt.

    ich glaube (auch), daß deine probleme mit den ungenauigkeiten LEDIGLICH dadurch auftreten, weil du versuchst, auch bei wenigen frames pro sekunde, immer gleichgroße animationsschritte pro zeiteinheit zu realisieren.

    ich finde aber, daß das nicht nötig ist. man sollte sich um diese "spezialfälle" keine gedanken machen, da sie sowieso normalerweise nicht eintreten und wenn, dann auch so realsiert werden können, daß das spiel einfach langsamer wird. dann hat man auch nicht die probleme, das man irgendetwas linear interpolieren muss... deine "winzige ungenauigkeiten bei z.B. winkeln, die durch verschiedene divisoren auftretten (25 oder 24)" fallen dann ganz weg und die problematik ensteht erst gar nicht und der code wird übersichtlicher. ich finde diese vorgehensweise besser.

    DENN:

    wenn jemand keinen schnellen rechner hat, dann hat er halt einfach pech gehabt, und muss alles in zeitlupe spielen! wenn man die neuesten spiele mit akzeptablen framerates zocken möchte, dann braucht man nunmal einen schnellen rechner.

    [ Dieser Beitrag wurde am 02.07.2003 um 03:31 Uhr von KXII editiert. ]



  • @rapso

    genau hier wird es deutlich:

    wenn du meinem beispiel mit der sich öfnenden tür folgen würdest, wüstest du dass die tür aufging und dabei ne gewisse rotation durchgeführt hat, wenn die framezahl total einbricht, dann kannst du das nicht mehr richtig berechnen, da du zwischen zwei positionen linear interpolierst, die punkte aber in wirklichkeit eine kreisbewegung hätten machen müssen, was zu einer kollision geführt hätte mit dem davor stehendem spieler.

    wenn die framerate total einbricht, dann kann man es, nach meiner methode, IMMER NOCH genauso VOLLKOMMEN OHNE VERLUSTE berechnen, aber eben langsamer, weil keine "zeit-multiplikationen/divisionen" durchgeführt werden. es wird alles ganz normal berechnet, nur langsamer.

    [ Dieser Beitrag wurde am 02.07.2003 um 03:37 Uhr von KXII editiert. ]


  • Mod

    die ungenauigkeiten fallen nicht weg, sie tretten immer auf, bei einem festen logictick sind sie aber abschätzbarer. das ist auch der grund weshalb bei netzwerkspielen öfters nur fixpoint arithmetic verwendet wird, weil die ungenauigkeiten der floats stark ausfallen können.

    extremfälle tretten öfters auf, z.B. bei leuten die die mindestanforderung für ein spiel haben, dann eine extreme scene, z.B. viele einheiten beim RTS, und die ruckeln da nur noch mit 2fps.

    und als programmierer mußte dafür sorgen dass es richtig ausschaut und wenn du die framerate zur berechnung der zeit nutzt wird's nicht vernünftig laufen... und falls du deinem marketing ne höchere mindestsanforderung aufdrücken möchtest, werden die die hälfte der features streichen lassen, damit die käuferschicht gross genug bleibt... und selbst pech gehabt.

    mit variablen zeitdeltas zu arbeiten ist ein graus und aus gutem grund macht das kaum noch jemand, und falls du mal ein system aus mehreren hundert interagierenden objekten hast und dein pc mal ruckt und das ganze system auseinander konvergiert, wirste deltas auch verabscheuen 🙂

    aber für die kleinen flugsimulationen oder desgleichen, wo eh niemand genau wissen muss wo sich ein flugzeug befindet, da kann man vielleicht timedeltas verwenden... obwohl das da auch niemand macht.

    rapso->greets();



  • @TheToast:

    Hast wahrscheinlich VSYNC an, dann schaffst Du auch net mehr FPS als Hz...

    @rapso:

    Also irgendwie schnall' ich dat immer noch net... 😕

    Sind da jetzt auf der einen Seite die Leute, die per HPC die vergangene Zeit im Frame berechnen und dann auf alle Bewegungen (Objekte, Partikelsysteme, ...) aufrechnen (was zwar im Spiel immer "gleich-schnelle" Bewegungen hervorruft, auf langsamen Rechnern aber ruckelt, bzw. "sprunghafte" Bewegungen auslöst) - und auf der anderen Seite die Leute, die die Logik immer fest intergriert im Mainloop verwenden, wobei dadurch auf langsameren Rechnern die Spielgeschwindigkeit "automatisch runterskaliert" wird (wie sieht's hier mit NW-Spielen aus??)?! Oder gibt es noch irgendwas dazwischen?!?


  • Mod

    die spielgeschwindigkeit bleibt eigentlich immer gleich, egal welcher rechner, das ist das was logicticks ausmacht. du kannst fest davon ausgehen, dass sie alle z.B. 40ms aufgerufen werden und dass das delta 40ms ist!

    um flüssige darstellung zu haben, hat man immer noch animatoren, die man im logictick einstellst.

    wenn du z.B. 15ticks haben möchtest und ne framerate von 225fps hast, werden zwischen zwei logicticks 15 bilder dargestellt, damit das nicht immer das selbe ist, benutzt man einen animator, dem kannst du dann einstellen, dass sich etwas an einer position befindet und in 40ms wird es sich an der anderen position befinden, dazwischen interpoliert der animator während des renders, aber logic wird nirgenswo benutzt.
    natürlich sollten animatoren nicht zu komplex werden, aber ein gutes beispiel wäre ein RTS, wenn du da 1000 einheiten hast, brauchst du sie nicht 25mal in der sekunde neu einzustellen, 5mal würde vielleicht reichen, aber damit die nicht einfach nur 5 bewegungen/s machen, kannst du dir einen animator schreiben, der mehreren linien folgt und somit die vorher berechnete route mit nem panzer abfährt, wenn der status alle 200ms geupdated wird, wird das scho ok aussehen

    rapso->greets();



  • Original erstellt von KXII:
    ich schrieb, daß ich dafür keine genaue erklärung habe. es ist halt so. glaube es oder nicht, mir egal.

    Wie bereits gesagt wurde: Wie ist das denn dann bei Fernsehern? Die Dinger schaffen zwar oft 100Hz, aber glaubst Du wirklich dass jede Spielekonsole bei jedem gut aussehenden Spiel über 100fps schafft?

    Original erstellt von KXII:
    wenn das so ist, dann ist das schön für dich. kennst du den satz aus dem film matrix: "unwissenheit ist ein segen" ? ausserdem sagte ich nie das ich unzufrieden bin. ich sagte nur es sieht besser aus!

    Ich weiß zwar nicht was Du mir mit Zitat sagen willst aber "ignorance is bliss" ist schon um einiges älter als die Matrix.
    Ich wage allerdings ernsthaft zu bezweifeln dass Du bei einem vernünftig programmierten Spiel einen Unterschied merken kannst.

    Original erstellt von KXII:
    genau meine rede, wenn das "zumindest im weitesten sinne" dazugenommen wird. im normalfall nicht. falls du das anders siehst, dann bitte eine genaue erklärung, da dies meine vorstellungskraft übersteigt.

    Beispiel Ego-Shooter mit Multiplayer-Modus: Stell Dir mal Quaak3 würde nicht ruckeln sondern einfach immer "ein bisschen langsamer" laufen. Das wäre wirklich fatal, denn es hieße dass jeder Spieler genau die gleiche Hardware bräuchte um das Spiel halbwegs synchron genießen zu können.

    Original erstellt von KXII:
    Wenn diverse Egoshooter...
    genau meine rede.

    Siehe oben.

    Original erstellt von KXII:
    wieso denn das? wenn die grafik öftes gerendert wird als die logik neuberechnet wird, wieso sollte dann alles im zeitlupenmodus ablaufen? 😕

    Hm, kann es sein dass sich hier irgendwo ein Missverständnis zusammengebraut hat? 😕
    Allerdings: Wenn Die Grafik öfters gerendert wird als die Logik neuberechnet wird was sollte das dann Deiner Meinung nach bringen?

    ich habe mir den absatz nochmal durchgelesen, aber ich erkenne keinen denkfehler. meine programme laufen ohne logikfehler, egal wieviel frames sie haben. bei zuwenig frames wird alles langsamer, aber das ändert, wie gesagt, nichts an der berechenbarkeit von kollisionen.

    Wenn bei zuwenig Frames alles langsamer wird dann hast Du gerade Deine eigene Frage im letzten Absatz beantwortet und solltest mittlerweile verstehen was das Problem daran ist.

    wenn du unbedingt ein programm schreiben willst, das auch bei wenigen frames pro sekunde die sprites immer gleichschnell über den bildschirm laufen (eher springen) lässt, und du dann irgendetwas programmierst das fehlerfaht berechnet wird, dann ist das dein problem. aber mit einer sinnvollen programmierung hat das nichts zu tun.

    siehe oben ("Fehlerhafte Berechnung" ist nicht das Problem, aber wenn mein Programm auf einmal nur mehr in Zeitlupe abläuft dann habe ich was falsch gemacht. Wenn es bei zu wenig FPS einfach nur ein bisschen ruckelt dann passt alles.)

    [quote]aber zurück zum thema...[quote]
    Irgendwie werde ich den Verdacht nicht los dass Du uns missverstehst - poste Doch mal (möglichst in einem neuen Thread; dieser wird zu unübersichtlich) ein bisschen von Deinem Timing-Code!



  • Original erstellt von KXII:
    wieso beziehst du diesen satz auf dich selbst
    ...
    der vorherige abschnitt war eindeutig auf "thetoast" bezogen, weil er sagte, daß er nie mehr fps hat als seine bildwiederholfrequenz. und weil ich mir das nicht vorstellen kann, wollte ich von ihm wissen wieso das so ist.

    Ich wollte untermauern dass thetoast recht hat und man bei aktuellen Spielen fast nie mehr FPS hat als Hz Bildwiederholrate.



  • Hi, also ich habe bis jetzt auch immer die von mir am anfang beschriebene methode angewandt, hatte aber auch einige Probleme. z.B. bei (realistisch)fallenden objekten, erst recht wenn diese auch noch springen (sollen). Die "andere Methode" klingt imho sehr überzeugend, da ja dieses Problem gelöst ist und weniger rechenzeit gebraucht wird. Was ist jedoch, wenn netzwerk spiel zB 25/s die logic aktualisieren soll, dies jedoch nicht schafft. Das würde dann doch heißen, dass das spiel langsamer liefe, was jedoch fatal wäre, oder?

    MfG DasPinsch



  • schau mal hier:
    http://www.bytesandmore.de/rad/

    da gibts ein Snippet mit Zeitmessung oder so, kannst es Dir leicht anpassen



  • @nman

    "Beispiel Ego-Shooter mit Multiplayer-Modus: Stell Dir mal Quaak3 würde nicht ruckeln sondern einfach immer "ein bisschen langsamer" laufen. Das wäre wirklich fatal, denn es hieße dass jeder Spieler genau die gleiche Hardware bräuchte um das Spiel halbwegs synchron genießen zu können."

    nicht für JEDEN spieler wird das spiel dann langsamer, nur für den der einen zu lahmen rechner hat, programmiersystem vorausgesetzt. wenn einer, weil sein rechner lahmt, nur 3 mal pro sekunde daten vom server empfangen und zu ihm senden kann, dann ist das halt so, aber die anderen spieler betrifft das doch nicht. jetzt kommt es halt auf die programmierung an, ob der spieler 3 mal in der sekunde rumhüpft oder 3 mal in der sekunde einen schneckenschritt macht.

    diskutiert ohne mich weiter. es wurden ja schon ein paar ansätze dargestellt die funktionieren. ich mache es so wie ich es die ganze zeit mache und die anderen halt so wie sie es die ganze zeit machen. hauptsache jeder wird glücklich. 🙂

    ich muss jetzt arbeiten!

    [ Dieser Beitrag wurde am 02.07.2003 um 13:56 Uhr von KXII editiert. ]



  • ok, ich glaub ich verstehe so langsam, wieso manchmal doch mehr Logictics notwendig sind. Was ich mache ist aber nur ein simples 2D Spiel, eine kleine WiSim, wo nur Daten angezeigt werden, der MausCursor und ein paar Buttons. Bei dem Spiel ist es tatsächlich sinnlos, mehr LogicTics zu machen. Man kann nur ein paar Sachen kaufen und so.

    [ Dieser Beitrag wurde am 02.07.2003 um 17:12 Uhr von TheToast editiert. ]


Anmelden zum Antworten