Diskuze: Akce za dobu reálného času, nezávisle na FPS.

Java Java Akce za dobu reálného času, nezávisle na FPS.

Avatar
Fikoun
Člen
Avatar
Fikoun:

Ahoj. Měl bych otázku na to jak můžu v Javě, kde mám normální Game Loop, který omezuje fps na 60 a potřebuju nějakou akci ve hře udělat za určitou dobu, třeba pohybovat objektem do prava po dobu 6sekund v reálném času, když jím budu posouvat každý frame o něco, tak na pomalém počitači, kde je 25fps to bude za jinou dobu než na počitači, kde je maximálních 60fps.

//x = poziceX objektu
//a = kolikSnímků proběhlo


int a = 0;
GameLoop()
{
        if(a < 360){
                x += 5;
        }
        a++;

        Render();
}

Zde to znamená, že pokud bude mít program na počítači 60fps, tak se bude pohybovat po dobu 6sekund (360/60), ale pokud fps bude nižší, třeba 30fps bude to za 12sekund (360/30).

 
Odpovědět 7. ledna 22:48
Avatar
dobrakmato
Člen
Avatar
dobrakmato:

Mal by si si implementovat deltaTime do tvojho game loopu. Tuto je o tom pekne napisane: http://gafferongames.com/…ur-timestep/

Ak mas viac otazok, tak pis.

Editováno 7. ledna 22:54
Nahoru Odpovědět 7. ledna 22:53
Čekni stránku so zabavnými obrázkami z internetov: https://www.coolovo.eu?ref=1007
Avatar
Fikoun
Člen
Avatar
Odpovídá na dobrakmato
Fikoun:

Ano, deltaTime v loopu mám a teda jak pomocí něj vykonám úlohu za určitý čas? :-)

 
Nahoru Odpovědět 8. ledna 17:19
Avatar
David Hanina
Člen
Avatar
Odpovídá na Fikoun
David Hanina:

Ahoj, teď by mělo stačit jen jednoduše k pozici přičíst rychlost * čas mezi 2 snímky

 
Nahoru Odpovědět 8. ledna 17:41
Avatar
Fikoun
Člen
Avatar
Fikoun:

Aha, a jak bych měl ziskat čas mezi 2 snímky?
V mém game loopu můžů získat aktuální FPS v číselné hodnoťe, můžu to nějak vypočítat pomocí toho?

 
Nahoru Odpovědět 8. ledna 18:46
Avatar
David Hanina
Člen
Avatar
Odpovídá na Fikoun
David Hanina:

Mám pocit, že je to napsané v odkazu co napsal dobrakmato, ale v případě že ne tak

staryCas = ziska_ubehnuty_cas();

while (true)
{
        novyCas = ziska_ubehnuty_cas();
        meziCas = novyCas - staryCas;
        staryCas = novyCas;
}

Promiň víc ti asi neporadím, v javě nedělám, btw vycházel jsem z právě onoho odkazu.

Editováno 8. ledna 19:00
 
Nahoru Odpovědět 8. ledna 18:59
Avatar
dobrakmato
Člen
Avatar
Odpovídá na Fikoun
dobrakmato:

Ved deltaTime je cas medzi dvoma snimkami. Pisal si, ze ho mas, tak jednoducho ten vektor rychlosti (alebo uz cokolvek, co robis), vynasob tym deltaTimom.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 8. ledna 19:05
Čekni stránku so zabavnými obrázkami z internetov: https://www.coolovo.eu?ref=1007
Avatar
Fikoun
Člen
Avatar
Odpovídá na dobrakmato
Fikoun:

To jsem nevěl. Děkuji.

 
Nahoru Odpovědět 8. ledna 19:39
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.