Anonymní profil Dave_F – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Dave_F – Programujte.comAnonymní profil Dave_F – Programujte.com

 

Příspěvky odeslané z IP adresy 62.245.112.–

Dave_F
C / C++ › Proč porovnávání elementu z…
24. 1. 2021   #387254

Dobrý den,

v poslední době dělám ve volném čase raycaster, něco na styl renderovacího enginu wolfensteina 3d.

V C++ teprve začínám a tak je možné že mi tu uniká nějaká úplně jednoduchá věc.

Herní mapa je uložena do 2 rozměrného arraye int Map[20][20], potom jsou nějaké výpočty paprsků atd. Ovšem důležitá je část, kdy porovnávám, jestli se na nějakém místě v mapě nachází nebo nenachází zeď.

Program jede asi na 85 FPS, což je na něco tak jednoduchého příliš málo. Když jsem spustil profiler, zjistil jsem, že nejvíce program zpomaluje tato část kódu:

if (Map[CheckY][CheckX] != 0)
{
break;
}

Tenhle kód vlastně jen ukončí porovnávací cyklus, protože je porovnávané místo různé od nuly, takže paprsek trefil zeď. Jenom nechápu, proč právě tato část programu běží tak pomalu. Je sice pravda, že tento proces kontroly místa v mapě běží vícekrát něž je nutno, protože jsem ho ještě plně nedodělal, ovšem není to jediná věc která běží vícekrát než je nutno. A přesto jen ona dělá takové potíže.

Nevíte tedy někdo co bych měl dělat? 

Dave_F
C / C++ › Proč porovnávání elementu z…
24. 1. 2021   #387253

Dobrý den,

v poslední době dělám ve volném čase raycaster, něco na styl renderovacího enginu wolfensteina 3d.

V C++ teprve začínám a tak je možné že mi tu uniká nějaká úplně jednoduchá věc.

Herní mapa je uložena do 2 rozměrného arraye int Map[20][20], potom jsou nějaké výpočty paprsků atd.,

ovšem důležitá je část, kdy porovnávám, jestli se na nějakém místě v mapě nachází nebo nenachází zeď.

Program jede asi na 85 FPS, což je na něco tak jednoduchého příliš málo. Když jsem zpustil profiler, zjistil jsem, že nejvíce program zpomaluje tato část kódu:

if (Map[CheckY][CheckX] != 0)
{
break;
}

Což vlastně ukončí porovnávací cyklus, protože jsem v mapě našel místo s jinou hodnotou než 0, takže paprsek trefil zeď. Jenom nechápu, proč právě tato část programu běží tak pomalu. Je sice pravda, že tento proces kontroly místa v mapě běží vícekrát něž je nutno, protože jsem ho ještě plně nedodělal, ovšem není to jediná věc která běží vícekrát než je nutno. A přesto jen ona dělá takové potíže.

Nevíte tedy někdo co bych měl dělat? 

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý