Deo zbornika Teorija razvoja igara

Razdvajanje briga u igrama

Razdvajanje briga je jedan od osnovnih principa softverskog inženjerstva koji se primenjuje i u igrama. Suština je da svaka klasa ima svoju nadležnost.

Svet ne treba da crta sebe, Renderer treba da crta Svet. Igrač ne treba da crta sebe, Renderer treba da crta Igrača u odnosu na Svet.

Primer podele nadležnosti

Jedan primer raspodele nadležnosti u razvoju igara. Nazivi klasa i implementacija naravno mogu varirati.

Crtanje objekata i sveta (Renderer klasa)

Obično imamo Renderer klasu koja crta objekte. Ona jednostavno uzima objekat i crta ga na ekranu. Može imati metode poput drawSprite(sprite), drawLine(..), drawModel(model), itd. Takođe može koristiti bilo koji API ispod, pa možemo imati jedan renderer koji koristi WebGL, a drugi koji koristi Canvas. Ako želimo da prenesemo igru na drugu platformu, jednostavno napišemo novi renderer i koristimo njega.

Renderer crta svet tako što prođe kroz stablo scene i nacrta svaki SceneNode na odgovarajućem mestu.

Pomeranje objekata (SceneNode klasa)

U većini game engine-a, Scena je graf (stablo) komponenti. Svaki objekat u sceni je čvor u stablu. Svaki objekat je vezan za nešto što nazivamo SceneNode. SceneNode je kontejner za mesh objekte, sa svim transformacijama (pozicija, rotacija, skaliranje) objekta (obično u odnosu na drugi SceneNode klasa).

Upravljanje objektima (SceneManager klasa)

SceneManager upravlja SceneNode-ovima. Ova klasa kreira i prati svaki SceneNode u našoj sceni. Možemo je pitati za određeni SceneNode (obično identifikovan imenom, kao što je “Player” ili “Table”) ili za listu svih čvorova.

Detekcija kolizije

Obično možemo upitati Scenu koji objekat se nalazi na određenoj tački, ili koji objekat seče neki zrak (ray intersect). Tada možemo odlučiti da premestimo igrača na novu poziciju ili da ga ne premestimo. Ove upite treba da obrađuju posebne klase, poput CollisionDetector klase, a SceneManager samo kreira i čuva čvorove.