Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX][PHP] Ajax i przeładowania
Forum PHP.pl > Forum > Przedszkole
_Martin_
Witam.

Pragnął bym otrzymać pare interesujących mnie porad i pomocy.
Jestem w trakcie pisania w php silnika mapy,
Tzn chodzenie chłopkiem poprzez przeglądarke rozumiecie z resztą o co chodzi, Lecz kazda zmiana pozycji np:
z $x=0 | $y=50 na $x=0 | $y=51 itp itd musi byc realizowana poprzez przeładowanie przeglądarki czy jest jakiś prostsz sposób, Nie chce zbytnio przebudowywac całego silnika teraz, który umożliwiał by to bez przeładowania, coś słyszałem o funkcji Ajax, tylko macie moze jakieś poradniczki które mogły podczas pisania takiego czegoś się przydac bo nigdy w tej technologi nie pracowałem A czas zacząć smile.gif
_Martin_
Ok a jak się tyczy sprawa Ile takie pobieranie i wysyłanie danych pobiera?
Czyli jakie jest obciążenie serwera przez to może inaczej o ile mniejsze niż przeładowanie strony smile.gif


I Widzę również że główną role grac tu będzie XMLHttpRequest zgadza się?
vokiel
Tu był podobny temat: [PHP]Mapa jak w plemionach

Ja widzę takie rozwiązania:
1. Jeśli mapa jest niewielka, warto wczytać ją całą, pokazywać tyko wybrany fragment, w momencie ruchu postaci przesuwać tło pod spodem.
2. Mapa jest większa, doczytujemy fragmenty w miarę poruszania się postaci. Krok w prawo, ukrywamy kolumnę pól po lewej, doczytujemy kolumnę z prawej. Krok w pawo-dół, ukrywamy górny wiersz i lewą kolumnę, doczytujemy prawą i dolny wiersz.

Ad.1. Wystarczy sam javascript, bo przy ruchu robimy tylko zmianę pozycji tła, ewentualnie obracamy obrazek postaci.
Ad.2. Tu już potrzeba zastosować ajax'a, ale pobieranych danych też nie będzie dużo, więc powinno to dość szybko działać. Poza tym można buforować dodatkowe wiersze i pola. Czyli jeśli mamy widoczny obszar 10x10 pól, to wczytujemy 12x12. Dzięki temu w momencie ruchu możemy od razu przesunąć pozycję, a w tle doczytać dodatkowe pola.
_Martin_
Chyba zmieniłęm intencje bo mapa ma 600 x 600 px i stała wartość tylko trzeba odświezyć przeglądare zeby zauwazyć ruch innego człowieczka.
To raczej łatwiejsze do roboty co nie smile.gif

Czyli podsumowując:

Ja jestem na
x=100 y=100 ide na
x=150 y=100

To ten co sobie stoi i się nie rusza musi otrzymac info ze sie ruszyłem na tym sektorze i zeby mu nie tyle co przeglądare odświezyło tylko mojego hipka smile.gif który zajmuje ok: 0,5 kb i ma rozmiar 50x20px Więc niepotrzebnie by było przeładowywać, całek przeglądarki smile.gif
vokiel
Jeśli to jest gra interaktywna to się ciut komplikuje, zależy ilu użytkowników masz na raz na planszy. Przed każdym ruchem trzeba sprawdzić np czy pole jest wolne. Ustawić np odświeżanie co 5sec, które pobierze pozycję innych graczy i przestawić markery tych postaci we właściwe miejsce. Trzeba zaplanować sposób radzenia sobie z konfliktami. Bo jeśli jeden użytkownik ze chce postawić swojego człowieczka na pole (120, 100) i w tym samym czasie drugi zobaczy, że pole jest wolne i zechce tam wstawić swojego.

Swojego hipka nie musisz od nowa pobierać, wystarczy pobrać nową pozycję i przesunąć tego "hipka"
_Martin_
Mam napisane to juz i moze 100 na jedym poolu byc tylko jak zrobic spr samego imgka jaką ma pozycje w bazie kazda zmiana pozycji jest updejtowana w mysqlu tabela "x" i "y" a potem po odświezeniu strony czyta pozycje i go potem tam pokazuje smile.gif
vokiel
Cytat(_Martin_ @ 19.12.2009, 13:15:24 ) *
Mam napisane to juz i moze 100 na jedym poolu byc tylko jak zrobic spr samego imgka jaką ma pozycje w bazie kazda zmiana pozycji jest updejtowana w mysqlu tabela "x" i "y" a potem po odświezeniu strony czyta pozycje i go potem tam pokazuje smile.gif


Teraz nie za bardzo wiem w czym problem blinksmiley.gif
Nie wiem na jakiej zasadzie działa poruszanie się po planszy u Ciebie, ale przykładowo:
Klikasz na krok w prawo:
Js przesuwa mapkę o kolumnę w lewo. Ajaxem wysyła nową pozycję (bądź samą zmianę pozycji). Robisz update w bazie. U danego użytkownika masz już wszystko zrobione. Każdy z innych użytkowników sprawdza pozycję pozostałych: ajax wywołuje skrypt, który pobiera id użytkownika i jego pozycję (możesz pobierać tylko tych, którzy u danego użytkownika będą widoczni), pobierasz to w formie np JSON, w javascript dla każdego użytkownika przesuwasz jego marker na planszy.
_Martin_
Tylko mam taki problem
Plik który odpowiada za mape to: index.php
A Element za odświeżanie miejsca gracza to:
Kod
$output = drawsector();

Po jego załadowaniu ładuje się mapa i ludzik.
I Musze odświzać cały index.php aby ponownie zmieniała miejscówa a to dużo kb i pamieci żżera sad.gif
jest iine rozwiązanie?
vokiel
To stwórz sobie plik ajax.php i w nim zwracaj tylko pozycje
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.