wizardus Temat założony przez niniejszego użytkownika |
[Teoria] Każdy NPC w oddzielnym wątku? » 2012-01-09 20:54:20 Witam!
Mam następujące rozważanie. Mianowicie, rozpatruję czy dla każdego NPC powinienem na serwerze zastosować oddzielny wątek. Tzn, wiem, że to by było najprostsze rozwiązanie, ale jako, że dopiero zaczynam z wątkami, nasuwa się pytanie - każdy gracz ( np 20) osobny wątek, każdy npc(np 200) osobny wątek. Te cyfry są małe, ale jak to w teorii wygląda, tzn czy jeśli uruchomię 200 wątków to będą one współgrały w czasie rzeczywistym ? (przyjmijmy, że NPC mają tylko chodzić, także operacje te są raczej mało pamięciożerne). Czy widzicie tu jakieś lepsze rozwiązanie (pętla while O.o??)
Pozdrawiam, i liczę na zrozumiałą dla mnie odpowiedź. |
|
kampar |
» 2012-01-09 21:10:08 nie, cała gra wg. mnie powinna być w jednym wątku. Wątki są potrzebne jedynie, gdy piszesz serwer. Wtedy musi on obsłużyć połączenia wszystkich graczy w tym samym czasie. Serwer przesyła pozycje wszystkich graczy do klienta, gdzie trzymane są w jakiejś tablicy i po kolei gracze są wyświetlani na mapie. Dla NPC tworzysz także tablice, gdzie między innymi przechowujesz ich pozycję i pętlą for ich wyświetlasz. |
|
wizardus Temat założony przez niniejszego użytkownika |
» 2012-01-09 21:16:46 kampar, no dobra, niby to ma sens. Ale teraz wyobraź sobie że dodajesz do NPC funkcjonalność taką, że.
1. Każdy NPC rusza sie asynchronicznie 2. Każdy NPC reaguje na inne NPC (przykładowo, Wilk goni sarne żeby ją zjeść itp)
Tu wydaje mi się, że należy zastosować wątki. A NPC nie są w aplikacji klienta tylko na serwerze. |
|
DejaVu |
» 2012-01-09 21:54:07 Jeden wątek wystarczy:
for(;; ) { for( auto it = npc.begin(); it != npc.end(); ++it ) it->wykonajRuchNPC(); }
|
|
wizardus Temat założony przez niniejszego użytkownika |
» 2012-01-09 22:20:53 No tak ale jak dobrze widzę, to ten serwer ma w takim wypadku tylko zajmować się NPC'ami w tym momencie :)
Tzn. chodzi mi o to, że z Twojej wypowiedzi nasuwa mi się tylko jeden wniosek:
1. W takim wypadku przy renderowaniu grafiki,aby uzyskać płynne przesunięcie 5 NPC muszę każdego po kolei przesunąć o niewielką ilość pikseli aby np opóźnienie w reakcji było niezauważalne, tak ? (tu już mowa o kliencie). No bo jeśli jakiś NPC by mi sie zapętlił (jakaś pętla w systemie by trwała) to dopóki ta pętla się nie zakończy dopóty inne NPC się nie zaczną przesuwać, no nie ? |
|
DejaVu |
» 2012-01-09 22:28:30 Chcesz robić osobne wątki dla każdego NPC - powodzenia ;p Zrób cokolwiek na kilku wątkach co będzie działało i oraz będzie miało sens to może zrozumiesz, że Twój pomysł jest mocno chybiony ;) |
|
Dark |
» 2012-01-09 22:30:44 Tak jak @DejaVu mogę ci tylko powiedzieć, że nie rozumiesz jeszcze sensu samych wątków :) |
|
wizardus Temat założony przez niniejszego użytkownika |
» 2012-01-09 22:31:55 @DejaVu
Nie przeczę :P Ja ogólnie zdobywam dopiero doświadczenie jak chodzi o wątki a tu nawołuję do polemiki samego schematu udawania przez NPC ruchu :P. Np mówiłem o asynchronicznym poruszania, a jak ruszyć nimi synchronicznie ? No chyba nie dodam każdemu po 5 px w tym samym czasie, albo raczej nie wyświetlę wszystkich na raz, tylko będą się te ruchy wykonywać po kolei. Co prawda empirycznie nie sprawdziłem jeszcze jak wielkie będą (czy w ogóle zauważalne) opóźnienia, ale sam problem wydaje mi się jasny. Choć może nie mam czym się martwić ? :D
@Dark
Nie chcę wszystkiego załatwiać wątkami :P Po prostu zastanawiam się jaka droga jest mniej lub bardziej sensowna. Wątki właśnie same w sobie wydają mi się złe bo podejrzewam, że przeskok między nimi no i do tego żeby serw nie zamulał to strasznie zawiłe musiałoby być :) (przy np 200 NPC) jeśli w ogóle wytrzymałby taki serw (nie mogę powiedzieć, dopóki nie sprawdzę empirycznie :D).
Wyjaśnijcie mi więc nie jak zrobić taki system oparty o pętle - bo to wiem - ale raczej, co do samych wątków, dlaczego wydaje się to pomysł zgubny? Czy moje przypuszczenia są słuszne ? |
|
« 1 » 2 3 |