GreenGo
22.05.2010, 23:11:47
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
croc
23.05.2010, 00:42:02
GD, Canvas albo zwykłe divy z position: relative. ja bym wybrał Canvas.
GreenGo
23.05.2010, 10:26:02
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
23.05.2010, 10:34:01
Zrzucam Ci książkę o tworzeniu gier internetowych

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
23.05.2010, 19:22:37
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
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
Kshyhoo
23.05.2010, 20:03:41
W jakimś projekcie widziałem:
A potem w kodzie:
<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
23.05.2010, 20:44:30
może nie w temacie, ale mam pytanie
jak zrobić taką mapke jaka jest np. na www.plemiona.pl?
GreenGo
23.05.2010, 21:24:50
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ć
croc
23.05.2010, 21:28:32
Czy po nałożeniu 19.000 divów 5x5 na mapkę 700x700 cokolwiek jeszcze widać
GreenGo
23.05.2010, 21:33:48
Oczywiście

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
23.05.2010, 21:37:06
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
23.05.2010, 21:37:29
Jeśli ma ich być tak dużo, to moim zdaniem tylko GD plus cron, choć utracisz stuprocentowy czas rzeczywisty.
GreenGo
23.05.2010, 21:49:57
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

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
23.05.2010, 22:01:07
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
23.05.2010, 22:01:43
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
23.05.2010, 22:07:33
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:
<div style="width:700px;height:700px;position:relative;border:solid #000000 1px;">
<div id="user_1" style="position:absolute;top:40px;left:100px;background-color:blue;width:5px;height:5px;"></div>
<div id="user_2" style="position:absolute;top:340px;left:400px;background-color:blue;width:5px;height:5px;"></div>
<div id="user_3" style="position:absolute;top:640px;left:600px;background-color:orange;width:5px;height:5px;"></div>
<div id="user_3" style="position:absolute;top:140px;left:600px;background-color:red;width:5px;height:5px;"></div>
</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
23.05.2010, 22:08:33
tehaha - eh, razja nie pomyślałem

zaraz to sprawdzę

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

Wielkie dzięki panowie za rady
croc
23.05.2010, 22:15:54
Z tymi divami to nie jest kwestia obciążania serwera tylko klienta
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.