Játékos mozgásának számítása fps szerint c++-ban

Játékos mozgásának számítása fps szerint c++-ban
2004-12-17T19:22:25+01:00
2004-12-20T02:10:38+01:00
2022-10-23T05:45:49+02:00
Kylerrr
Hi all!
Szerintem a téma címéből minden kiderül, de azért elmondom. Van a player és van az fps mérő. Az én gépemen minden frankó, de a haver szerint túl gyorsan ugrál a player, mert neki jobb fps-e van. Van egy float melybe eltárolom a kiszámolt y (magasság) tengelyen lévő elmozdulást. (-= 0.15f;) Na most az kéne, hogy a másodpercenként kiszámolt fps segítségével kiszámolja hogy mennyit mozduljon el ahhoz a játékos, hogy minden gépen ugyan olyan gyors legyen. Az fpst egy int-be tárolom. Bocs ha kicsit ködös. Help me!!!

by Kylerrr
Mutasd a teljes hozzászólást!
Akkor nálad a 'fizika szimulációjánál' van elrontva valami.
Ha ismered a két frame között eltelt időt, akkor az egy fizika feladat, hogy kiszámold, hogy a testek koordinátái hol lesznek ennyi idő múlva. Ha ez a számolás korrekt, akkor minden fps-re ugyanakkorát kell ugornia.

Állandó sebesség esetén:
elmozdulás = sebesség * eltelt idő.

Nem állandó sebesség esetén numerikusan integrálunk, ami gyakorlatilag azt jelenti, hogy nagyon pici időközökre bonjuk az eltelt időt, és miden pici időközre kiszámoljuk a sebességváltozást és a megtett utat.
Mutasd a teljes hozzászólást!

  • Üdv!

    Szerintem ne az fps alapján számold, hanem minden frame kirajzolásánál számold ki, hogy mennyi idő telt el az előző kirajzolás óta (Windows alatt lényegében minden frame kirajzolásának az elején kell hívni egy GetTickCount() függvényt), és az alapján számold ki az elmozdulást (sebesség * eltelt idő)

    Dave
    Mutasd a teljes hozzászólást!
  • Nekem most így van megcsinálva de mégsem tökéletes:
    static float frameTime = 0.0f; float currentTime = timeGetTime() * 0.001f; g_FrameInterval = currentTime - frameTime; frameTime = currentTime;
    Mutasd a teljes hozzászólást!
  • Hali!

    Csak tanácsolnám, hogyha Windows alatt csinálod, akkor folyamodj a szokásos módszerhez, miszerint meghívod a SetTimer() függvényt(pontos szintaxisért nézz utánna), majd minden WM_TIMER eseménynél számolj! Igy akár tudsz pontosan 25 fpst is elérni.
    Nézd meg, esetleg ez megoldás a problémádra!

    Sok sikert!
    Mutasd a teljes hozzászólást!
  • Mi nem tökéletes? A g_FramwInterval-t logoltad, és rossz érték jön ki, vagy az jó, csak utána rosszul számolsz vele? Ennyi forráskódból nem látszik, hogy hol a hiba.
    Mutasd a teljes hozzászólást!
  • kiiratom képernyőre a játékos koordinátáit így tudom mekkorát ugrik. Ha az égre nézek és nagyobb az fps 10.*-t ugrik, ha pedig a pályára akkor csak 8.*-t. Így elég rossz.

    ja az ugrás így néz ki:
    0.15 * g_FrameInterval
    Mutasd a teljes hozzászólást!
  • Akkor nálad a 'fizika szimulációjánál' van elrontva valami.
    Ha ismered a két frame között eltelt időt, akkor az egy fizika feladat, hogy kiszámold, hogy a testek koordinátái hol lesznek ennyi idő múlva. Ha ez a számolás korrekt, akkor minden fps-re ugyanakkorát kell ugornia.

    Állandó sebesség esetén:
    elmozdulás = sebesség * eltelt idő.

    Nem állandó sebesség esetén numerikusan integrálunk, ami gyakorlatilag azt jelenti, hogy nagyon pici időközökre bonjuk az eltelt időt, és miden pici időközre kiszámoljuk a sebességváltozást és a megtett utat.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd