Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: gra viawww - walka w czasie rzeczywistym
Forum PHP.pl > Forum > PHP
wezyrno
Chciałbym do swojej gry przeglądarkowej zaimplementować system walki czasu rzeczywistego.
System wyglądałaby tak:

1. Gracz A wybiera atak przeciwko graczowi B - zapisuje do bazy obrażenia w wyniku obliczenia ataku. - strona by się odświeżała po tej akcji.
2. Wyświetla obrażenia w okienku graczowi A - to oczywiste, skoro strona się odświeża po jego ataku to ma to jak na tacy.
3. Wyświetlanie obrażeń zadanych graczowi B. - I TU JEST PROBLEM.

Skoro graczowi B, po ataku gracza A, nie odświeża się strona, to nie widzi on zadanych mu obrażeń.
Wiem, że można zastosować AJAX. Ale ja nie chcę, aby co 1 sekunde u gracza B odświeżał się kod, w oczekiwaniu na atak gracza A, aby go wyświetlić.

Czy ktoś mi pomoże?
Crozin
Google i szukasz kolejno:
1. bidirectional http communication
2. websockets/comet

Albo tworzysz grę przy pomocy Flasha/apletu Javy.
wezyrno
A coś mniej zaawansowanego?
CuteOne
Tworzenie gier via www w czasie rzeczywistym to jedno z najtrudniejszych zadań jakie możesz postawić przed programistą.. dlaczego? Zobacz na ten filmik
http://www.youtube.com/watch?v=_RRnyChxijA
zielu001
Ja mam taką myśl twórczą że można by po stronie przeglądarki w bardzo krótkich odstępach czasu sprawdzać czy przeciwnik wykonał jakąś akcje, jeśli tak to pobiera ruch wink.gif

Albo coś na bazie komunikacji klient-server-klient np. przy pomocy socketów, co jest prostym zadaniem.
Giluś
Nie wiem czy w ogóle jest to dobre rozwiązanie (optymalne) ale można zrobić coś takiego:

Skrypt w JS który odświeża stronę:
[JAVASCRIPT] pobierz, plaintext
  1. <script>
  2. var refreshId = setInterval(function()
  3. {
  4. $('#p').fadeOut('slow').load('inc/akcja.php?id=".$id."').fadeIn('slow');
  5. }, 3000);
  6. </script>
[JAVASCRIPT] pobierz, plaintext


I wtedy w pliku akcja.php, robimy zapytanie, czy użytkownik wykonał jakąś akcję (można więcej getów wykorzystać) i jeśli jest to możesz ewentualnie wysłać jakąś zmienną która na głównej stronie wykona odświeżenie lub na tej stronie akcja.php ogólnie zrobić cały system walki.

Pozdrawiam.
!*!
Cytat(Giluś @ 20.08.2012, 08:56:10 ) *
Nie wiem czy w ogóle jest to dobre rozwiązanie


Nie jest, ponieważ przy dużej ilości graczy zarżniesz bazę, a po co masz wysyłać/odbierać cokolwiek, gdy tego nie ma.


Crozin w zasadzie wyczerpał temat. Osobiście polecałbym websockets z html5 + w razie jego braku flash. To jak to zaimplementujesz to już inna bajka.
hind
comet też powinien dać rade, i przynajmniej z flashem nie trzeba się bawić (a websocket nie jest jeszcze standardem)
CuteOne
Ja bym postawił na flasha jako most serwer-flash-js (+comet dla ipadów). Ogólnie comet to dobre rozwiązanie pod warunkiem, że wie się jak z niego korzystać (sam nieraz ubiłem serwer bo nie wiedziałem, że to trzeba robić tak a to inaczej wink.gif) dlatego stawiał bym na flasha. Główny problem w gierkach "real time" stanowi sam serwer, który utrzyma XXX graczy bez większego problemu.. tu PHP odpada zanim wystartuje sad.gif
Giluś
Czy na pewno aż tak bardzo zeżrę bazę mając 3/4 kolumny:

Akcje:
ID(int) | id_user(int) | data(int/date) (ewentualnie jeszcze można dać swoje id)..

I później coś takiego:

Wyszukaj w bazie czasu który jest mniejszy (chyba) niż obecny i jeśli zwraca true to $akcja = 1; false: $akcja = 0; (oraz ewentualnie id_my inne moje) oraz id_user - id przeciwnika.
I na stronie głównej dać: if(!$akcja) {Nic} else Został zadany cios teraz trzeba pobrać odpowiednie dane..

Wiem, że są lepsze rozwiązania ale nie każdy potrafi to zrobić, a to jest jakaś alternatywa..
!*!
Albo robisz coś dobrze, albo wcale. Metoda "bedeMiauGre" się zwyczajnie nie sprawdza. Jeśli robisz coś dla siebie i kilku kolegów to może być, ale co jak ewentualnie wzrośnie zainteresowanie?
CuteOne
Widzisz to nie jest jedno zapytanie jak by się mogło wydawać.. W jednej akcji "atakuj gracza" możne się znajdować
- autoryzacja
- routing
- acl
- pobieranie x danych na temat zalogowanego użytkownika
- pobieranie x danych na temat użytkownika, z którym walczy zalogowany gracz
- wygenerowanie contentu strony lub jsona z danymi dla JS
(o include XX plików i ich parsowaniu nie wspominając)

teraz pomnóż to przez XXX żądań.

A to co napisałeś z if/else to żart? Jak już wspomniał Wykrzyknikowy Gwiazdor(tongue.gif) albo robisz coś porządnie albo skończy się jak wiele projektów tego typu - w koszu
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.