Giluś
26.12.2011, 20:49:04
Cześć, robię grę wyścigową w FLASH (puki co mam ją zrobioną pod 1 osobę) chce zrobić aby można było z nią zagrać w kilka osób przykładowo 5 (wcześniej chciałbym wybrać ile), nie wiem jak ma to działać za bardzo, muszę na pewno:
- Wysłać swoją pozycję tj. X i Y (2d), ID oraz prędkość ?.
- Odebrać pozycję i inne zmienne innych graczy.
Używając mysql zawalę maksymalnie serwer, bo te dane musiał bym zrobić w pętli która rozpoczyna się gdy włączę plik FLASH i połączą się wszyscy gracze, aż do końca.
Wiedząc, że 1 okrążenie trwa średnio 30-60sekund, trzeba wysłać i odebrać zapytanie do mysql średnio 1x na 0,1s (albo i mniej) czyli są to liczby rzędu kilkunastu tysięcy zapytań w ciągu 1minuty, chyba, że jest jakiś inny sposób na zastosowanie tego ?.
Czy do tego potrzeba serwera dedykowanego, czy wystarczy zwykły wirtualny (chodzi mi tylko, czy da rade postawić na wirtualnym czy potrzeb jakiegoś serwera postawić na linuxie/windows, czy tylko wystarczą podstawowe zainstalowane funkcje.) ?.
Pozdrawiam i z góry dziękuje.
wookieb
26.12.2011, 21:02:03
Poczytaj o Red5 i komunikacji socketowej. Następnie warto zapoznać się z info co to jest ekstrapolacja np toru ruchu innych graczy.
A teraz najważniejsze? Po ci Ci w tym Mysql?
Giluś
26.12.2011, 21:12:31
Jestem troszkę laikiem w sprawach Flash, wiec postanowiłem komunikować się podobnie jak w PHP czyli MySQL (widziałem w wielu grach przeglądarkowych zastosowanie x,y,z a później przypisywanie do danej pozycji postaci), wiec tak też chciałem tu zrobić.
Tylko, że z tego co się orientuję, to trzeba posiadać dostęp do ssh, aby zainstalować Red5.
Tylko nie potrafię sobie tego wyobrazić jak to ma w ogóle działać, ja coś muszę wysłać i odebrać, raczej użyje do tego AS, ale... nie wiem co dalej..
Zadaje takie troszkę niezrozumiałe pytania bo nie za bardzo orientuję się w tym temacie, ale myślę że ktoś pomoże..
Pozdrawiam i dziękuje..
wookieb
26.12.2011, 21:16:41
Więc rozczaruję Cię. Nie da się odpowiedzieć na to pytanie tak o w jednym wątku.
Podałem Ci 3 terminy do których powinieneś się skłonić. Z jednym już sie poddałeś, a co dopiero z dalszymi.
szmerak
26.12.2011, 21:37:33
Cytat(wookieb @ 26.12.2011, 21:02:03 )

Następnie warto zapoznać się z info co to jest ekstrapolacja np toru ruchu innych graczy.
Mógł byś powiedzieć bardziej terminowo jak się to nazywa w PHP ponieważ ciekawi mnie bardzo, a jak szukam w googlach o ekstrapolacji to tylko wyniki matematyczne dostaje...
wookieb
26.12.2011, 21:43:45
No i własnie o to chodzi. To matematyczny "algorytm".
Jeżeli wiesz, że samochód porusza się z prędkością x po torze y to jesteś w stanie na podstawie tych danych przewidzieć gdzie samochód znajdzie się za 5 sekund.
Algorytm ten jest używany w grach online aby zapełnić płynność rozgrywki pomimo niedoskonałości sieci.
Crozin
26.12.2011, 21:49:10
Nie tak łatwo jest zrobić grę sieciową czasu rzeczywistego.
1. Gra wyścigowa więc zapewne komunikacja będzie musiała odbywać się za pośrednictwem UDP. Google: udp datagrams, reliable datagram
2. W takich grach cała fizyka obliczana jest zarówno po stronie serwera jak i klienta, którą trzeba nieustannie synchronizować. Informacje jakie może przesyłać serwer to aktualna pozycja i wektor ruchu obiektów, klient natomiast może wysyłać informację o podejmowanych przez użytkownika akacjach.
3. Będziesz potrzebować serwera, który w pamięci będzie przechowywał i nieustanie przetwarzał dane - żadna baza typu MySQL nie jest tu potrzebna.
Na początek zbiór świetnych artykułów wprowadzający w świat gier sieciowych:
http://gafferongames.com/
szmerak
29.12.2011, 02:14:52
Crozin chodzi ci mniejwięcej o takie coś...?
Serwer gry przechowywuje wszystkie dane w pamięci... nie spamując bazy danych przy każdej akcji.
A następnie cyklicznie jest wykonywany save i wszystkie dane są zapisywane do bazy.. w przypadku crasha serwera poprostu jest tkz "cofka serwera" do czasu ostatniego sava...
Wydaje mi się że taki serwer nie powinien mieć kłopotu z dostarczaniem informacji o aktualnym położeniu (moim/graczy dookoła itp...) ponieważ nie musi pytać cały czas bazy... i efekt czasu rzeczywistego w jakimś stopniu byłby osiągnięty...
Chyba w takim przypadku zwykła pętelka powinna wystarczyć?
P.S sorki za odkopanie, ale zainteresowałem się Javą ostatnimi czasy i interesuje mnie jak rozwiązywać tego typu problemy a niechcę zakładać nowego tematu skoro już taki mamy

.
Crozin
29.12.2011, 02:40:41
Nie, zwykła pętelka nie wystarczy. W tego typu grze położenie obiektu zmienia się co ile? 1/40 sekundy? 1/60? Nie ma mowy byś był w stanie pobrać aktualną pozycję obiektu z serwera dla każdej generowanej klatki.
Co do Javy... język nie ma tutaj najmniejszego znaczenia. Na początek gorąco polecam zestaw artykułów jakie podlinkowałem wcześniej - nakreśli Ci on całą sytuację, problemy których istnienia nie jesteś świadomy i sposób ich rozwiązania. Sam przerabiałem go właśnie z Javą.
Co do zapisywania stanu gry to może to być w takiej postaci.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.