Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 11

Wątek: [MAPA]Po raz kolejny..

  1. #1
    Zarejestrowany
    Dołączył
    Jan 2010
    Posty
    27

    Domyślnie [MAPA]Po raz kolejny..

    Witam

    Najpierw szczegóły potem pytania:

    beztytvqv.jpg link do tego IMG

    1 - gdy niema elementu
    2 - trawa (chodzenie = 0)
    3 - skala (blokada, chodzenie = 1)

    Lewy górny róg - Kratki w paincie.. jeśli coś jest na tych samych pos dodaje to nad warstwe (img na img )


    Co jest:
    -Wczytanie mapy z bazy mysql (x,y,img,walk,zindex) (1,1,obrazek.jpg,1,0)



    O co mi teraz chodzi??

    Pytania:
    1. Jak najlepiej wczytać mapę ?
    -Jeden obrazek mapy (mniejsze obciążenie bo wczytuje tylko pola blokady.. lecz słabsza możliwość szybkiej edycji mapy)
    -Wczytanie każdej kratki z bazy tak jak jest to teraz (łatwa edycja lecz obciążenie)

    2. Blokady
    -Jak załadować blokadę by ją potem odczytać?

    Mój pomysł:
    Tera jest to stworzone na tabelce. Mój pomysł to wczytanie do danej kratki td wartości np <td block="1"> zablokowane </td>. Przy ruchu np strzałką wbok pobieram pos + 1 i jego wartość. W jquery zawsze robiłem przez click i odczytanie a tak to niemam pojęcia zupełnego jak to wykonać skoro i tak postać stoi w miejscu..to zara..

    3. Mapę taką zostawić czy zrobić ją inaczej a co z tym idzie.. muszę zrobić poruszanie czyli mapa stoi postać porusza czy vice versa mapa się porusza a postać stoi...


    Moje umiejętności: php, jquery 4+


    Dzięki i pozdrawiam!

  2. #2
    Programista Awatar Aravorn
    Dołączył
    Apr 2011
    Posty
    343

    Domyślnie

    Moment, mapa ma być tylko widocznym obszarem? Czyli, gdy przekroczysz krawędź, to przenosi Cię na inną mapę, czy przejście następuje w sposób dynamiczny? Bo jeżeli przejście będzie statyczne: wczytujesz inny plik mapy podchodzi się do tego inaczej, niż do przypadku przejścia dynamicznego.
    Jeżeli dodatkowo dodasz opcję centrowania, też powstaje dodatkowa kwestia do rozważenia
    Opisz to, a odpowiem na pytania, tylko muszę wiedzieć, jak to rozplanowałeś.

  3. #3
    Zarejestrowany
    Dołączył
    Jan 2010
    Posty
    27

    Domyślnie

    Nie no mapa musi się przesuwać albo tak jak mam tera albo mapowanie z całych OBRAZÓW że tak powiem . Postać wycentrowana jeśli o to pytasz?

  4. #4
    Programista Awatar Aravorn
    Dołączył
    Apr 2011
    Posty
    343

    Domyślnie

    Powiedzmy, że jesteś w rogu praktycznie, dajesz centrowanie i mapa się przesuwa odpowiednio tak, że znajduje się ta postać po środku, nie zmieniając swojego położenia (x,y), czyli wszystko się przesuwa;p
    Musisz więc to robić dynamicznie Nie możesz brać dużych obszarów w tle, bo widzisz powiedzmy 1/10 obrazka, który cały pobierasz za każdym razem, transfer będziesz miał bardzo duży no i zapchane łącze a dynamicznie pobierasz tylko określone kwadraciki, które można jeszcze cache'ować tło ogólnie możesz zrobić jednolite, np. trawa, ale wszelkie obiekty powinny być dynamiczne.
    Baza danych jest dobra do tego typu rzeczy. Przy grach tego typu trzeba się liczyć z dużym jej obciążeniem

    Odnośnie pytania 1.:
    Dynamicznie wczytywać kawałki mapy. Obciążenie, jeżeli dobrze przemyślisz strukturę bazy itd. będzie duże, ale znowu bez przesady Mapę możesz cache'ować np. przy użyciu APC, memcached (sporo hostingów udostępnia serwery memcached 64mb, co jest całkiem przyzwoitą pojemnością, jeżeli myślisz o współdzielonym, lepiej vps albo dedyk).
    Pola powinny wystarczyć: id -x - y - type i tyle
    Na poziomie przeglądarki odpowiednio wczytujesz obrazki, jeżeli korzystasz z jQuery;p (polecam zajrzeć np. w źródło mapki na Plemionach, żeby zobaczyć sam mechanizm wczytywania wykorzystaj JSON jako format przesyłania danych.

    Odnośnie pytania 2.:
    Blokada musi być po stronie serwera, dodatkowo wypada zrobić po stronie klienta, a nawet można powiedzieć, że trzeba bo większość korzystających osób to będą i tak gracze, nie kombinatorzy.
    Dane z ruchu odbierasz jako kierunek: czyli gracz wybiera jeden z pośród góra, dół, lewo, prawo.
    Po pierwsze: w kodzie obliczasz współrzędne po przesunięciu, czyli jak w lewo, x zmniejszasz o jeden, góra - zmniejszasz y, zależy czy robisz układ z zerem w lewym górnym rogu, czy kartezjański. Z przesłanych danych służących do generowania (do tych co doradziłem JSON) sprawdzasz typ pola, o tych współrzędnych. Jeżeli to będzie np. 5, czyli powiedzmy rzeka, nie wykonujesz przesunięcia, może być dymek: tam jest woda, nie umiem pływać, itp.
    Jeżeli jednak możesz się poruszyć na dane pole wysyłasz zapytanie do serwera, ale nie wysyłasz tych nowych współrzędnych, tylko np. zmienną kierunek=gora, dol itd., a nie: action=move&x=435&y=453, ze względów bezpieczeństwa.
    Na serwerze masz już pobrane (przyspieszam) dane o położeniu gracza. Obliczasz jak w JS nowe współrzędne, czyli dla gora odejmujesz o 1 wartość y, sprawdzasz, co tam się kryje w bazie, jeżeli typ jest powiedzmy <20, czyli pola o różnych grafikach, po których można chodzić, przesuwasz położenie w bazie i wysyłasz odpowiedź do przeglądarki.
    To chyba tyle

    Aaa z typami pól jeszcze: type to liczba, z zakresu jednego bajta bez znaku (0-255) chyba, że będziesz miał więcej typów pól. Każdy odpowiada za konkretną grafikę, czyli masz obrazek też o nazwie np. 1.png itd. nazwa obrazka to TYP.png (wiadomo, nie musi być png). w bazie trzymasz tylko liczbę, przeglądarka pobierze odpowiedni obrazek, czyli utworzy do niego ścieżkę. I powiedzmy, że po polach o type <20 masz grafiki 20 pól różnych, po których można się poruszać, jeżeli jest więcej, to nie można na nie wejść.

    Teraz to raczej na pewno wszystko;p

    Szerzej poruszę temat na blogu, jak go zrobię, to takie ogólne sprawy

    Like this jeżeli się przydało

  5. #5
    Zarejestrowany
    Dołączył
    Jan 2010
    Posty
    27

    Domyślnie

    dzięki za zainteresowanie ;d
    z jquery u mnie niema problemu więc z jsonami czy postami też

    w bazie danych id nie poczebne chyba

    przy wczytywaniu mapy chciałem pobrać obszar wyświetlony + 10 kratek w okół dla lepszego działania (oczywiście div zakrywa swoje)..

    dobra dajmy że wczytuje to teraz jak dałem na ss.. lecz za chiny ludowe nwm jak mam zrobić te przesuwanie niżej... na blokowanie już wpadłem jak ale nwm czy dobre:
    js: var x = 4; var y = 5; (na starcie)
    i za każdym ruchem odpowiednim robie +1 lub -1.. i przy każdym ruchu sprawdzam postem czy na danej pozycji + znajduje się coś jeśli nie to lecim z ruchem..
    raczej nie będzie to optymalnie szybkie ale innego pomysłu niemam. noi co z tym ruchem.. jak wczytywać te mapę dalej.. teraz mam normalnie z tablicy do smarty i w smarty pętlą rozdzielanie w miejsca..

    pierwszy raz robie taką mapkę więc dlatego laikuje

  6. #6
    Programista Awatar Aravorn
    Dołączył
    Apr 2011
    Posty
    343

    Domyślnie

    id może się czasami przydać, rób jak uważasz Każda tabela powinna mieć jakiś klucz.
    Z blokadą, którą chcesz zastosować, jak wcześniej opisałem będzie najbezpieczniejsza. W przeglądarce nie przytnie nic. Po stronie serwera MUSI być kontrola, bo jeżeli jej nie będzie, będzie można latać po całej mapie, takie rzeczy sprawdzają w kodzie nawet "pro hakierzy" Nie jest to też znowu takie obciążające dla serwera
    Optymalnie szybko być może byłoby wysyłanie współrzędnych punktu, do którego się przesuniemy, czyli skrypt PHP nie odejmowałby 1 albo dodawał jeden do którejś wartości, ale w sumie jednak chyba nie, bo trzeba by sprawdzać dwie zmienne (fitr danych wejściowych). Nie wiem, czy jest jakieś bardziej optymalne i jednocześnie bezpieczne rozwiązanie, nie mam czasu teraz nad dokładniejszym zastanawianiem się nad tym

    Przesuwanie: chodzi Ci o przesuwanie całej mapy? Są dwie opcje: albo z każdym ruchem wczytujesz od nowa obrazki, czyli generujesz mapę na podstawie obecnych danych + nowego rzędu, tu dolnego, bo idziesz w dół. Czyli na mapie grafiki będą mieć położenie -1 do y

    Ew. radzę zajrzeć do kodu JS na Plemionach, nie pamiętam nazwy dodatku do jQuery, który pomagał robić takie animowane przesuwanie. W tym wypadku mapa nie byłaby generowana od nowa, tylko byłyby dodawane nowe elementy. Mapa okolicy wioski, tam jest przesuwanie całego tła zaimplementowane, co tutaj w 90% można wykorzystać

    Smarty tu nie przyda się do animacji mapy musisz utworzyć po stronie serwera plik, który będzie tylko zwracał np. dane w JSON, nic więcej jeżeli jeszcze coś będziesz ze Smarty kombinował przy żądaniach AJAX to optymalne nie będzie na 100%. Generowanie mapy musisz przerzucić na przeglądarkę serwer wysyła liczby, resztą się zajmuje skrypt JS. Właśnie to jest najoptymalniejsze rozwiązanie - przerzucenie działania na przeglądarkę użytkownika, z jednoczesnym zachowanym bezpieczeństwem

    Jeszcze raz powiem, że zajrzałbym do Plemion, bo większość rozwiązań, aby było najszybciej i naładniej można się nauczyć z gotowego projektu

  7. #7
    Zarejestrowany
    Dołączył
    Jan 2010
    Posty
    27

    Domyślnie

    http://pl9.plemionamapa.pl/ heh


    no dobra to blokada będzie przy każdym ruchu sprawdzana.

    chyba z każdym ruchem wczytywać nowe obrazki ale nwm jeszcze jak dodawać to do tablicy i jak sprawdzać dane posy

    smarty używam tylko do łatwości edycji kodu i fajnego cachowania

  8. #8
    Programista Awatar Aravorn
    Dołączył
    Apr 2011
    Posty
    343

    Domyślnie

    Blokada MUSI być sprawdzana z każdym ruchem.

    Musisz pomyśleć, jak będzie wyglądała Twoja mapa, czyli rozmiar widoczny dla gracza, powiedzmy 7x7 pól. Przesuwasz się w dół, potrzebujesz więc dolnego paska,gracz znajduje się powiedzmy cały czas fizycznie po środku obrazka, tło pod nim się przesuwa.
    Pobierasz dane z zakresu, gdzie: x należy do przedziału: < położenie gracza - 3; położenie gracza + 3>
    a y = + 3 + 1 (rozpisałem celowo 4 na 3 + 1, żebyś łatwiej zrozumiał Pobierasz za pomocą AJAX dane JSON: plik ma zwrócić Ci tylko te dane, nic więcej. Jest wbudowany parser, z tego co pamiętam, takich wyrażeń, do tablicy łatwo doprowadzisz Jeżeli nie ma -> Google.
    I tu zależnie, czy będziesz pisał samemu skrypt do ładowania tych nowych fragmentów mapy czy pobierzesz jakiś gotowy z internetu, jak robią nawet profesjonalne zespoły, musisz zapoznać się z dokumentacją skryptu lub w przypadku budowy własnego samemu wymyśleć metodę, co aż takie trudne nie jest
    W przypadku używania ajax handlers nie ma sensu używanie smarty, bo tutaj ono może spowalniać. Fajny cache na plikach? No nie wiem, czy taki fajny i szybki;p Tu smarty nie jest potrzebny, po prostu własna wiedza, moduł cache na plikach, jeżeli do zaimplementowania jest prosty, możesz nawet podpatrzeć rozwiązania Smarty (mówię tu oczywiście o pluginie cache, nie o cache polegającym na parsowaniu szablonu do czystego PHP, bo to do map nie nadaje się w ogóle )

  9. #9
    Zarejestrowany
    Dołączył
    Jan 2010
    Posty
    27

    Domyślnie

    najpierw musze zrobić poruszanie i wczytywanie mapy :/
    potem pomyślę nad blokami..

    już mnie to wkurza

  10. #10
    Zarejestrowany
    Dołączył
    Jan 2013
    Posty
    14

    Domyślnie

    Z kąt masz taki skrypt do mapy? Możesz podać bo ciekawy . ?

Strona 1 z 2 12 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. [Tallos] Kolejny problem CSS
    Przez Deze w dziale Support Vallheru
    Odpowiedzi: 8
    Ostatni post / autor: 17-08-2011, 22:57
  2. Kolejny lay - Gra samochodowa
    Przez Dix w dziale Wasze prace
    Odpowiedzi: 5
    Ostatni post / autor: 17-05-2010, 13:49
  3. Kolejny Błąd
    Przez Baston w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 10
    Ostatni post / autor: 25-12-2009, 14:37
  4. Kolejny projekt
    Przez LumiX w dziale Wasze prace
    Odpowiedzi: 0
    Ostatni post / autor: 10-08-2009, 21:31
  5. Kolejny lay.
    Przez Xca w dziale Wasze prace
    Odpowiedzi: 7
    Ostatni post / autor: 11-03-2008, 19:12

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •