Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Umieszczenie graczy na pamię
Forum PHP.pl > Forum > PHP
GreenGo
Witam,
chciałbym zrobić aby w grze rpg, którą piszę, była możliwość podglądu gdzie znajdują się poszczególni gracze. Ich pozycję chciałbym przetrzymywać w bazie jako np. 1,123,234 gdzie "1" jest lokacją a 123x234 aktualnymi współrzędnymi. No własnie, jak to wykonać ? Jak sprawić aby umieścić możliwość poruszania się po obrazu za pomocą współrzędnych, jak zaznaczyć kropkę oznaczającą gracza na tej mapie (obrazku) i jak np. podświetlić na pozycję danego gracza najeżdżając na niego w panelu bocznym z wypisanymi wszystkimi graczami ? Jak zaznaczyć na tej mapce miejsca jak sklepy itp. gdzie użytkownik będących w danych współrzędnych będzie mógł coś kupić? Potrzeba będzie do tego biblioteka GD czy może da się to wykonać w inny sposób ? Wiem, że dużo pytań ale mam nadzieję, że otrzymam jakieś wskazówki smile.gif
croc
GD, Canvas albo zwykłe divy z position: relative. ja bym wybrał Canvas.
GreenGo
Do canvas, z tego co widzę, jest bardzo mało poradników / tutków itp. :/ Nie dało by się tego zrobić za pomocą zwykłego <map> ?
motyl-pl
Zrzucam Ci książkę o tworzeniu gier internetowych smile.gif
Jak znasz chodź trochę angielskiego to Ci pomoże, ja ją czytam w wolnych chwilach.
Tam jest na przykładzie szachów to opisane.
http://test.motyl-pl.info >> PHP Game Programming
GreenGo
Dzięki choć nie wiem czy mój angielski jest taki dobry aby czytać książkę w tym języku. Bawiłem się teraz w canvas`ie. Bardzo fajna opcja ale niestety nie ma możliwości zaprogramowania zdarzenia po najechaniu myszką na jakiś element oraz nie ma wsparcia ze strony IE :/

W takim razie czego najlepiej użyć do nakładania pozycji użytkowników na mapę (jpg), możliwość np, wyświetlenia informacji o uzytkowniku po najechaniu na niego na mapie oraz aby cały czas gdzieś obok wyświetlały się współrzędne myszki na mapie aby użytkownik wiedział gdzie iść ?
tehaha
z góry mówię, że nie mam doświadczenia z projektowaniem gier, ale może by to po prostu zrobić na divach np taka wyświetlona mapka to było by 100x100 małych divów i w każdym był by wyświetlony obrazek w zależności od tego co ma tam być: trawa, drzewo, domek, postać , te elementy czyli mapa była by zapisana w wielowymiarowej tablicy i przelatując pętlą po tablicy wyświetlasz mapę, przy takim rozwiązaniu bez problemu zrobisz tak, że po najechaniu na gracza czy na domek wyświetli się chmurka z opisem
Kshyhoo
W jakimś projekcie widziałem:

A potem w kodzie:
  1. <body onLoad="mapka(get_x_start,k,get_y_start,player,village,tribe); minimap(get_x_start,k2,get_y_start,player,village,tribe);">

Wyglądało to coś a'la Plemiona. Szczegółów nie znam...
Lejto
może nie w temacie, ale mam pytanie
jak zrobić taką mapke jaka jest np. na www.plemiona.pl?
GreenGo
Cytat(tehaha @ 23.05.2010, 19:34:38 ) *
z góry mówię, że nie mam doświadczenia z projektowaniem gier, ale może by to po prostu zrobić na divach np taka wyświetlona mapka to było by 100x100 małych divów i w każdym był by wyświetlony obrazek w zależności od tego co ma tam być: trawa, drzewo, domek, postać , te elementy czyli mapa była by zapisana w wielowymiarowej tablicy i przelatując pętlą po tablicy wyświetlasz mapę, przy takim rozwiązaniu bez problemu zrobisz tak, że po najechaniu na gracza czy na domek wyświetli się chmurka z opisem


No potestowalem teraz takie rozwiązanie ale jest mały problem. Mapka będzie miała ok 700x700. Zakładając, że 1 div ma 5x5 to muszę w pętlach wygenerować ponad 19000 div`ów co dość zamula przeglądarkę :/

Kshyhoo - tego chyba nie uda mi się zrozumieć wstydnis.gif
croc
Czy po nałożeniu 19.000 divów 5x5 na mapkę 700x700 cokolwiek jeszcze widaćquestionmark.gif
GreenGo
Oczywiście smile.gif One są przezroczyste, po prostu jak w pętli skrypt napotka diva ze współrzędnymi takimi jak lokalizacja usera to koloruje go na dany kolor dzięki czemu na mapie widoczna jest jego obecna lokalizacja.
tehaha
ja myślałem, że Tobie chodzi o rozdzielczość w takiej jak użytkownik sobie gra, bo wtedy to jeden div zapewne nie miałby mniej niż 15px i wtedy miałbyś już tylko 2k divów, ale jeżeli to ma być tylko mapka to wtedy zrób zwykły obrazek i na nim przy pomocy współrzędnych nanieś kropeczki
croc
Jeśli ma ich być tak dużo, to moim zdaniem tylko GD plus cron, choć utracisz stuprocentowy czas rzeczywisty.
GreenGo
A znasz może jakiś poradnik do GD w którym było by coś podobnego zaprezentowane ? Nigdy nie miałem do czynienia z tą biblioteką więc moje zmagania mogły by potrwać dość duży okres czasu.
cron raczej odpada bo nie jest mi w sumie potrzebny i póki co jestem na localhoście na windowsie winksmiley.jpg
Czas rzeczywisty nie jest mi chyba potrzebny. Skrypt przy odświeżeniu strony ma pobierać wszystkie pozycje użytkowników z bazy i generując te divy, porozmieszczać ich.

ew. jedno pole zwiększę do 10x10 co da mi niespełna 5000 div`ów a to już się w miarę szybko generuję, choć nie wiem czy przy wielu użytkownikach serwer by wytrzymał.
tehaha
jeżeli jesteś w stanie ustalić współrzędne usera to nie musisz generować tych pustych divów, tylko wygeneruj wyłącznie te z userami, dla każdego divu reprezentującego usera ustawisz position:absolute względem divu-rodzica czyli konteneru mapki i na podstawie tych współrzędnych obliczysz atrybuty left i top,
croc
Cron MUSI być, bo biblioteka GD jest dość powolna i nie wyobrażam sobie co by się stało gdybyś każdemu użytkownikowi generował w locie obrazek 700x700. Co do poradników, to tutaj na php.pl jest artykuł o GD, a poza tym Google: GD tutorial.
tehaha
chodzi mi o to, że możesz dać tło tego dużego diva obrazek mapki i tam powstawiać tylko divy reprezentujące użytkowników o tak:
  1. <div style="width:700px;height:700px;position:relative;border:solid #000000 1px;">
  2. <div id="user_1" style="position:absolute;top:40px;left:100px;background-color:blue;width:5px;height:5px;"></div>
  3. <div id="user_2" style="position:absolute;top:340px;left:400px;background-color:blue;width:5px;height:5px;"></div>
  4. <div id="user_3" style="position:absolute;top:640px;left:600px;background-color:orange;width:5px;height:5px;"></div>
  5. <div id="user_3" style="position:absolute;top:140px;left:600px;background-color:red;width:5px;height:5px;"></div>
  6. </div>

przy czym dla każdego diva obliczysz sobie left i top na podstawie współrzędnych jego pozycji, rozwiązanie na pewno było by efektywne
GreenGo
tehaha - eh, razja nie pomyślałem tongue.gif zaraz to sprawdzę smile.gif

croc - no to chyba póki co GD odpada. Spróbuje to z position:absolute a jeśli nie wypali to będe myślał dalej smile.gif

Wielkie dzięki panowie za rady smile.gif
croc
Z tymi divami to nie jest kwestia obciążania serwera tylko klienta smile.gif
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.