Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Teoria] Każdy NPC w oddzielnym wątku?

Ostatnio zmodyfikowano 2012-01-10 15:07
Autor Wiadomość
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ź.
P-47774
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.
P-47776
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.
P-47777
DejaVu
» 2012-01-09 21:54:07
Jeden wątek wystarczy:
C/C++
for(;; )
{
    //PĘTLA GŁÓWNA APLIKACJI:
    for( auto it = npc.begin(); it != npc.end(); ++it )
         it->wykonajRuchNPC();
   
    //renderuj grafikę
}
P-47780
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 ?
P-47783
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 ;)
P-47786
Dark
» 2012-01-09 22:30:44
Tak jak @DejaVu mogę ci tylko powiedzieć, że nie rozumiesz jeszcze sensu samych wątków :)
P-47787
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 ?
P-47788
« 1 » 2 3
  Strona 1 z 3 Następna strona