Samozřejmě že počítáč jen výslednou polohu, protože trajektorie je přece blbost. Situace se nezobrazuje v nějakém spojitém rytmu, ale po snímcích. Že je to plynulé, splyne člověku v hlavě. V reálu je to ale snímek po snímku, stejně jako třeba fotky. Ty potřebuješ vědět, jaká bude poloha panáka v následujícím snímku, ne jaká bude za deset snímků dopředu (to tě nezajímá, protože do té doby do něj může hráč střelit kulometem, a tak změnit jeho rychlost pohybu atp.).
A příklad, jak to swarm (i já) myslíme:
P - panák č. 1, posunuje se vpravo
R - panák č. 2, posunuje se vlevo
x - možné lokace umístění
Výchozí situace:
P x x x R
1. krok:
x P x R x
- P i R se posunuli, nic jim v tom nebránilo
2. krok:
fáze P:
x P x R x -> x x P R x
- P se posunul, nic před ním nestálo
fáze R:
x x P R x -> x x P R x
- R zjistil, že už před ním něco je (Pčko), tak se zastavil
3. krok
x x P R x
- P i R zjistili, že před nimi něco je, takže se nehýbou
Čili kolize je ošetřena tím, že vše probíhá sekvenčně.
------------
Kdybys to dělal paralelně, tak v 2. kroku budeš mít následující problém:
fáze P, thread P:
x P x R x -> x x P R x
- P se posunul, nic před ním nestálo
fáze R, thread R:
x P x R x -> x P R x x
- R se posunul, nic před ním nestálo (tučně jsem znázornil zastaralá data)
Jenže tady vidíš, že to není v souladu, protože každý thread vidí svého konkurenta na jiném místě! P se tam posunul, protože tam (z jeho pohledu) nic nebylo. Ale R se tam posunul také, protože tam také (z jeho pohledu) nic nebylo. Jenže v reálu (objektivně) tam už byl druhý panák. Takže ve výsledku situace po sloučení výstupů threadů vypadá takhle:
x x PR x x
... takže máš problém.
Multithreadově by to šlo (částečně) udělat tak, jak navrhuje swarm, tj. namísto plnohodnotného počítání fyziky v prvním kroku použít nějakou velmi hrubou (= velmi rychlou) aproximaci pohybu a v globání paměti označit problémová místa, u nichž hrozí, že se tam panák přesune (pokud se ona aproximace trefí). Ale to je zase o odhadování a může to mít hodně blbé následky - pokud se aproximace netrefí, tak se ti prostě může stát, že buďto:
1) se dva panáci pohnou na stejné místo
2) jednomu panákovi bude odepřen vstup na nějaké místo, kam aproximace předpovídala pohyb jiného panáka, přestože po spočtení detailní fyziky se tam nepohnul
Čili sekvenční zpracování, které ti zaručuje, že se vše bude hýbat správně, se změní na sice rychlejší paralelní, ale také s potenciálem produkce chybných výsledků.