Kolokvij vprasanja Flashcards
To kaj je reko na predavanju da rad da not
Razlika med game engine in igralnim pohodom (framework)
Oba imata podobno nabor knjiznic, framework ima pomagalna orodja ki zadostujejo za izdelavo racunalniskih iger, uporabimo takrat kadar zelimo imeti popoln nadzor nad kodo in ali drugace napisati dele fw.
Game engina pa uporablja orodja kot ogordja, ima vsaj 1 vizualni urejevalnik za scene in vsaj 1 level editor.
Kako bi nacrtoval igro sah
Dinamika: igra za 2 igralca, s svojimi figurami premagati nasprotnika, nacrtovanje posameznih figur. igralca se izmenjujeta v potezah.
Cilj je premagati nsprotnika z matiranjem njegovega kralja.
Mehanika: konec igre, zacetek igre, posebne poteze, premik za vsako figuro. izenacenje…
Elementi: cas, st poteze, sahovnica, prikaz odigranih potez
kaj je delta time in zakaj je pomemben
Delta time je cas ki pretece med dvema izrisoma, pomemben je saj so casovno odvisne akcije(spawn, gibanje, trajanje powerupa) neodvisne od zmogljivosti strojne opreme oz hitrosti osvezevanja
Napisi glavno zanko igre
While {
handleInput;
update(deltatime);
render;
}
v update se izvede vsi premiki objektov, nastavijo se timerji itd..
V render pa se izrisujejo texture, particlsi itd…
Kaj se dogaja v svetu simulacij v igri soccer 2023
igra uporablja realisticne fizikalne zakone, AI upravlja nasprotnikovo ekipo, interkacije med igralci zogo in okoljem.
AI upravlja Igralce, kateri imajo razlicne lastnosti kot je vzdrzljivost, hitrost, in natancnost. tudi zoga sledi fizikalnim lastnostim kot je fels, izguba hitrosti odboji in pospeski.
Kako bi implementiral slow motion
delta time / 2
ali
delta time = speedtransformation.SlowMotion(getDeltaTIme()) // ni prav samo primer alternative
Smer hitrosti je podana kot vektor dx,dy, izracunaj kot
dy/dx = |v|sin(α) / |v|cos(α) = tan(α)
α =arcTan(dy/dx) -> [-90, 90]
dx>0 ∧ dy >0 -> α =arcTan(dy/dx)
dx<0 -> α =180+arcTan(dy/dx)
dx>0 ∧ dy <0 -> α =360+arcTan(dy/dx)
Hitrost podana s kotom in hitrostja
dx = 10px/scos(45)1s = 7.07px
dy = 10px/ssin(45)1s = 7.07px
x’ = x+dx=1px+7.07px=8.07px
y’ = y+dy=1px+7.07px=8.07px
Kako bi naj enostavneje implementiral odboj s kotom in hitrostjo
levo in desno = 180 - alfa
gor in dol = 360 - alfa
Odboj s podanim vektorjem
levo desno dx = -dx
gor in dol dy = -dy
Kako pohitriti zaznavo trkov?
S tem da polygon pretvorimo v rectangle.
Kaj je Fragmentaija
tezava ki jo povzroca neucinkovito dodeljevanje in sproscanje pomnilnika (Bloki)
Pooling - resitev fragmentacije
namesto da vedno znova ustvarjamo in brisemo objekte (alokacija in delokacija pomnilmnika), imamo fiksno velik bazen (pool), iz katerega vzamemo po potrebo in vracamo objekte
Resuje tudi problem pocasne alokacije in delokacije pomnilnika pri OO
za katere stvari bi upoarbil pooling in slabost
Primeri uporabe poolinga so:
- neskocno veliko ovir, ki se pojavljajo in zginjajo
-razlicni metki
-zvocni ufekti
-particli
Slabost je da izvajanje ni nujno hitrejse kot v priemeru ustvarjanja in brisanja, Optimiziranje tega je lahko otezeno.
Kako dejansko impl pooling?
seznam pool <template>, osnovne funkc so:
FreeObject, obtainObject, freeCount, clear.</template>
Dobra praska je da je velikost bazena omejena na velikost, ki jo dolocimo v fazi optimizacije igre.
Enako: Koraki pouporabe objektov (5 korakov)
1 Objekt implementira poolable
2reset metoda se klice ob vracanju objekta v pool
3 pool.obrain vrne prost objekt iz pomnilnika
4. pool.free vrne objekt v pomnilnik
5 pool .fill vnaprej rezervira pomnilnik.
Mere sveta -> kako bi definiral igro SVET bakterij
vzel bi za enoto 1 bakterijo, nato pa naredil 2d prostor kjer se kreira velikost 20x20 enot
Razlicne kamere
Kamera omogoca predstaviti KAJ vidimo,
Uporabljamo Perspektivno kamero, kjer so oddaljeni objekti manjsi,
Ortogonalno kamero, kjer so objekti iste velikosti, vendar uporabljamo z order
Viewport
doloci kako bomo videli svet (rzmerje med sirino in visino slike) oz aspect ratio
Prilazuje del sveta (sceno), in resuje problem razmerij in locljivosti
Vrste pogledov so strecth,m fill, fit, screen, extend
Najpgoostejsi je fit, kateri obdrzi aspect ratio, lahko pa se pojavijo borderji.
Sprite batch, paketni izris (nimam zapisano ampak zgleda pomembno)
sprite batch je proces, kiz druzi vec nalog v en skupen ukaz on paket ukazov ki se izvede naenkrat.
tako ne dobimo bottlenecka med komunikacijo med gpu in cpu (npr izris 10000 objektov)
morajo biti med begin in end
Kaj vse lahko debugiramo?
izris mreze(grid),
Elementi v skatle(npr objekte v svoje skatle),
Loggiranje upoarbniku skritih stvari,
pomozna debug kamera ki je namenjena razkritju nevidnih napak v sceni,
in pa s pomocjo klasicnega debugerja
Kako se uporabljajo kamere pri debug
kamero lahko premaknemo ven iz scene v kateri je uporabnik in preverimo ali se vredu spawnajo objekti, ali jih vredu cistimo in ali je vse v svojih boundsih. premik je lahko levo, desno, gor, dol, zoom in, zoom out.
Kako delujejo sistemi delcev
vsebujejo nakljucno gibanje (naravni pojavi (ogenj, dim), explozije), generiramo delce, ki so predstavljeni s pomocjo slike, ta se izrisuje z lastnosti definiranimi v .p datoteki, vsak delec ima hitrost, cas, barve, velikost.
lahko se skalirajo, zmanjasjo itd
Kako implementiramo sistem delcev
s pmocjo sistema za izdelovanje delcev, nato njegovo datoteko shranimo v nas projekt, V projektu uporabimo particleEffect za definicojo nasega delca, tako ga lahko klicemo v vecjh delih nase kode, kjer zelimo da se delec konca, ponovno izrise ali predvaja.
za rocket impl:
pe.setPosition(rocket.x, rocket.y)
Kako dobimo efekt zarjenja?
ko se en cas transparentne teksture izrisuejo eno ces drugo, intenziteta svetlosti pa se sesteva. torej ucinek prekrivanja s uporabo blending mode