![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 31.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam taki problem, ponieważ zrobiłem skrypt przenoszenia i upuszczania z pomocą poradnika, i tu się pojawił problem. Mogę założyć 2 zbroje oraz 2 bronie, próbowałem to naprawić i faktycznie na pierwszy rzut oka, działa. Tu dam kod:
http://jsfiddle.net/SWu3B/2/ Ale załóżcie 1 broń i 1 zbroje, a potem poprzenoście zbroje nr 2 i bron nr 2 w inne miejsce, niech się pozamieniają kolejnością i spróbujcie je założyć, u mnie zakłada 2 zbroje i 2 bronie;/ Jak to naprawić? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
Witaj.
Trochę przetestowałem Twój skrypt i znalazłem błąd w drugiej linii JavaScriptu. Kod $(slot).find('id', 'class'); Szczerze to nie wiem czemu są dwa parametry, w każdym razie szukasz w tej linijce odpowiednio elementów <id> oraz <class>, a jak wiadomo takie elementy nie istnieją i nie będą istnieć. Zamiast powyższego - ustaw jeden parametr tak jak tutaj: Kod $(slot).find('div'); Wtedy sprawdzamy czy nasz slot zawiera jakiś przedmiot. Z grubsza to by rozwiązywało Twój problem wymieniony w poście, lecz ja zauważyłem kolejny błąd. Mianowicie po wykonaniu akcji jakie opisałeś w poście - czasami udaje się >>podmienić<< przedmioty. Mam na myśli sytuację, gdy slot broni zawiera broń1 i przeciągniemy na niego broń2 to one zamieniają się miejscami. Dzieje się tak czasami, lecz nie zawsze. Nie wiedziałem na jakim efekcie Ci zależy więc zrobiłem w dwóch wariantach: Wariant Pierwszy - brak podmiany: - link: http://jsfiddle.net/SWu3B/12/ - zmiana: dodane linie 21 oraz 22 Wariant Drugi - włączona podmiana: - link: http://jsfiddle.net/SWu3B/14/ - zmiana: dodane komentarze w liniach - od 28 do 31 - od 34 do 37 Jeśli, tak jak piszesz, uczysz się tego wszystkiego - postaraj się zrozumieć dlaczego wprowadziłem takie, a nie inne zmiany. Niestety nie jest to realnie możliwe do wytłumaczenia w tym poście, ale w razie chęci kontaktu - zapraszam na priv. Dodatkowo podpowiem, abyś do testowania swoich skryptów wykorzystywał: - podgląd na żywo zmieniających się elementów oraz atrybutów html, - konsoli JavaScriptu, gdzie możesz sprawdzać wartości zmiennych w trakcie działania skryptu, - polecenia console.log(text), dzięki któremu możesz wypisywać zmienne do konsoli w celu sprawdzenia wartości. To wszystko osiągniesz przy wykorzystaniu Chrome Tools lub Firebug w Firefoxie. Ja polecam opcję pierwszą. Pozdrawiam ![]() -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 31.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki Ci wielkie, właśnie o taki efekt mi chodziło żeby było bez podmiany
![]() A może mi ktoś powiedzieć jak zrobić żeby po upuszczeniu przedmiotu do ekwipunku, lub potem do inwentarza robiło update do bazy danych? Czytałem coś na ten temat, lecz niestety wiele z tego nie zrozumiałem. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
Witaj ponownie po tak długim czasie
![]() Fajnie, że nie porzuciłeś tego skryptu - fajna zabawa. Odpowiadając na Twoje pytanie ustalmy co dokładnie chcesz zrobić. Po przeniesieniu/zdjęciu elementu z ekwipunku powinieneś pobrać zawartość całego ekwipunku. Sprawdzasz jakie elementy zawierają div.slot.weapon oraz div.slot.armor. Jednak w takim przypadku na wierzch wychodzi jeden problem - przy przenoszeniu elementów kasowane jest ich id. Poprawione tutaj: http://jsfiddle.net/SWu3B/18/ Dalej potrzebujemy przesłać dane za pomocą funkcji $.ajax() do serwera. Przesyłamy dane za każdym razem, gdy zawartości Twoich slotów zmieniają się. Tak się składa, że możemy tę funkcję podpiąć do bloku na samym dole: http://jsfiddle.net/SWu3B/21/ Jeśli nie miałeś styczności z funkcją $.ajax(), w internecie na pewno znajdziesz jakiś kurs. Polecam: http://www.altcontroldelete.pl/artykuly/aj...-json-w-jquery/ Odbierając dane po stronie PHP będziesz miał odpowiednie dane w tablicy post:
Wystarczy odebrać i zapisać do bazy. W razie problemów - daj znać. -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 31.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Od razu dziękuje za pomoc.
Możesz mi to jeszcze trochę objaśnić, żebym w przyszłości nie miał nie jasności?
Domyślam się że link wtedy będzie wyglądał tak:
Jeśli tak, to muszę to przechwycić w pliku php a następnie ułożyć zapytanie. Czy tak? I o co chodzi z tablicą, mam ją zrobić, czy to służyło jako podpowiedź. Z góry dzięki. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
W momencie takiego użycia funkcji ajax() uzyskasz połączenie jak po wysłaniu formularza z danymi.
Jest to połączenie POST więc wyciągasz dane z tablicy $_POST - tak jak odbiera się formularz. Tablica, którą Ci wypisałem jest właśnie tą przykładową tablicą $_POST z danymi przychodzącymi z ajaxa. Mam nadzieję, że jasno wyjaśniłem. -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 31.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ok już wszystko zrobiłem, ale jak odróżnić przedmiot zakładany od zdejmowanego?
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
A musisz odróżniać ?
Zarówno przy zakładaniu jak i przy zdejmowaniu musisz aktualizować wszystko w bazie. -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 93 Pomógł: 0 Dołączył: 31.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
No tak, ale przy zakładaniu robię update do tabeli users w kolumnie dajmy na to weapon z 0 na 1 (id broni), a potem jak ją przerzucam do bp to chcę zrobić update żeby znowu było 0.
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
Dane są przesyłane do serwera zarówno przy zdejmowaniu jak i zakładaniu ekwipunku.
Przy każdym wywołaniu kryptu php aktualizujesz dane. Czyli masz i zakładanie, i zdejmowanie. -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 13.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Nie wierzę - wy jeszcze mój skrypt maglujecie? Nie sądziłem, że komukolwiek się przyda
![]() Co do tematu - nie wiem, jak łączysz się z bazą, ale najlepszym wyjściem będzie tu ORM jakiś. Będziesz mieć wtedy klasę (u mnie np. Inventory), w której masz slot (atrybut) na każdy założony przedmiot i x slotów na "plecak". Takie wyjście jest bardzo wygodne - możesz napisać np. metodę do sprawdzania, czy postać ma dany przedmiot (foreach slot i sprawdzasz ID). Wstawiłbym kawałki kodu - tak "dla pokoleń", ale piszę to w pythonie... |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 450 Pomógł: 135 Dołączył: 18.11.2010 Skąd: Wschowa Ostrzeżenie: (0%) ![]() ![]() |
A ja myślałem, że autor pierwszego postu wykonał go sam
![]() Pozdrawiam prawdziwego autora ![]() -------------------- “ Computers are good at following instructions, but not at reading your mind. ” - Donald Knuth |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 59 Pomógł: 0 Dołączył: 13.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Znaczy się tak... Skrypt już dawno temu gdzieś "zaginął" na tym forum, a pierwszym "problemem" był wszędzie-stawialny item... Potem tak poszło i poszło... Teraz tak myślę, żeby do niego wrócić i udoskonalić go...
Mam taki pomysł: zrobić listę (js to będzie []) dostępnych klas przedmiotów (wszystkie zakładalne + używalne i wszelaki crap), z której to będzie (nie)możliwe przesunięcie/założenie czy użycie danego przedmiotu. Oto "zamysł": Kod var classes = ['weapon', 'armor']; #i 1000 innych #i zamiast $('.slot.weapon').droppable({ accept: '.item.weapon', drop: function() { $(this).droppable('disable'); } }); #dla każdej klasy #zrobić jedno $.each(classes, function(key, value) { $('.slot.' + value).droppable({ accept: '.item.' + value, drop: function() { $(this).droppable('disable'); } }); }); I jeszcze to samo w funkcji $('#bagpack').droppable({drop ...});. Takie rozwiązania, to dopiero anty-hard-code (hard code'owanie, to najgorsze co może być - wiem z własnego doświadczenia). #EDIT: Jak pomyślałem, tak i zrobiłem - link do fiddle'a: LINK By zrobić więcej klas (typów przedmiotów), to dopisujemy je do zmiennej classes. #EDIT 2: Jeżeli ktoś chce z tego korzystać "przemysłowo" - korzystajcie. Tylko mała rada - zamiast ID w postaci cyfry, lepiej dać im jakiś prefix (np. id="item_1") - zmiana dosłownie kosmetyczna (uwzględnić ją tylko w JS!), a pozwoli zaoszczędzić nerwów. #EDIT LAST: No i tak - pomysł mnie wciągnął z powrotem. Tu podaje link do fiddle'a: LINK. Tam jest cała klasa DnD (którą będę rozwijał) oraz przykład z 9 klasami przedmiotów. Wymaga ona jQuery i jQuery UI. Ten post edytował HgReed 12.07.2012, 15:24:59 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 09:50 |