Herní návrhový vzor Herní smyčka
Z CHWiki
Obsah |
[editovat] Účel
Představuje základní struktury hry a hlavní bod, ze kterého jsou aktivovány zbývající části hry.
[editovat] Jiné názvy
Hlavní smyčka, Game loop, Main loop
[editovat] Použití
Po vytvoření okna a inicializaci všech částí hry začne hra vykonávat hlavní smyčku. To je "nekonečný" cyklus, ve kterém se provádí načtení vstupu od uživatele, aktualizace herních objektů a vykreslení herního světa.
[editovat] Implementace
Hlavní cyklus může vypadat například takto (pseudokód):
function GameLoop() {
while (true) {
if (UpdateGame() == Exit)
break;
Draw();
}
}
- Funkce GameLoop() je zavolána, jakmile je dokončena inicializace hry. Po jejím skončení se uvolní herní objekty a program skončí.
- Pokud používáte nějaký ucelený herní engine, potom pravděpodobně hlavní smyčku implementuje on.
- Funkce UpdateGame() typicky přečte vstup a zavolá aktualizaci na každém herním objektu. Druhá varianta je, že zjistí, jaké vstupní události nastaly (např. tlačítko myši nebylo stisnkuto a teď už je) a pošle tuto událost všem zaregistrovaným objektům.
[editovat] Poznámky
- V hlavní smyčce se typicky počítá FPS.
- Hry, které chtějí využít vícejádrové systémy musí běžet ve více vláknech, což vyžaduje už trošku odlišný přístup.
- Toto není jediná možnost. Dále je možné vykreslovat jen když se něco změní. Kvůli úspoře energie se takový přístup použije především na mobilních zařízeních. V aktuálních PC hrách je to asi zbytečné, protože tam se neustále něco mění.
[editovat] Důsledky
- Hra běží co nejrychleji (třeba i rychleji, než je nutné) a spotřebovává veškeré volné systémové prostředky.
[editovat] Známá použití
Quake 2 a další
