NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Fikoun
Člen
Avatar
Fikoun:7.1.2016 22:48

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:7.1.2016 22:53

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
Avatar
Fikoun
Člen
Avatar
Odpovídá na dobrakmato
Fikoun:8.1.2016 17:19

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
Odpovídá na Fikoun
Neaktivní uživatel:8.1.2016 17:41

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
Neaktivní uživatelský účet
Avatar
Fikoun
Člen
Avatar
Fikoun:8.1.2016 18:46

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
Odpovídá na Fikoun
Neaktivní uživatel:8.1.2016 18:59

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
Neaktivní uživatelský účet
Avatar
dobrakmato
Člen
Avatar
Odpovídá na Fikoun
dobrakmato:8.1.2016 19:05

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
8.1.2016 19:05
Avatar
Fikoun
Člen
Avatar
Odpovídá na dobrakmato
Fikoun:8.1.2016 19:39

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.