Herní návrhový vzor Herní smyčka

Z CHWiki

Přejít na: navigace, hledání

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ší

[editovat] Příbuzné vzory

Herní návrhový vzor Rozdělení snímku