Do nového roku jako lepší programátoři? Znovu otevíráme večerní školu programování. Nette framework, návrhové vzory, testování nebo vůbec poprvé kurzy ASP.NET dostupné odkudkoli v republice.
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.1.2016 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.1.2016 22:54
Nahoru Odpovědět 7.1.2016 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.1.2016 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.1.2016 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.1.2016 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.1.2016 19:00
 
Nahoru Odpovědět 8.1.2016 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.1.2016 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.1.2016 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.