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

Wątek: Poprawki skryptu chodzenia po mapie

  1. #1
    Zarejestrowany
    Dołączył
    Aug 2014
    Posty
    11

    Domyślnie Poprawki skryptu chodzenia po mapie

    Witam,
    Korzystając z tego tuta: http://forum.mmocenter.pl/f64-budowa...pie-11083.html zrobiłem skrypt mapy, rozkminiłem jak wstawić tam mapę większą niż jest dostępna normalnie i jak zrobić tam postać która posiada 4 klatki a nie trzy, ale mam parę pytań dotyczących tego skryptu. Jak można spowolnić postać, żeby tak szybko nie biegała? Jak zrobić poprawną kolizję mapy, albowiem postać "wbija" się w granice mapy i zatrzymuje się po za jej granicę do puki nie odświeżę. Jak zrobić coś na rodzaj kordów tej mapy? Jak napisałem wyżej, zrobiłem do tego postać 4 klatkową, a nie trzy klatkową jak w oryginale i jest taki problem, że postać niby jest dobrze wyświetlona, ale zamiast wyświetlać wszystkich klatek to wyświetla od drugiej, można coś z tym zrobić? Za każdą pomoc dziękuję

  2. #2
    Aktywny
    Dołączył
    Dec 2011
    Posty
    273

    Domyślnie

    Zmiana szybkości poruszania się postaci:

    Kod:
    setTimeout("map_poz(x+=8,y);animation(0,3);",50);
    setTimeout("map_poz(x+=8,y);animation(1,3);",100);
    setTimeout("map_poz(x+=8,y);animation(2,3);",150);
    setTimeout("map_poz(x+=8,y);animation(1,3);",200);
    setTimeout("go=true;",220);
    Poczytaj o funkcji `setTimeout()`. Tutaj jeden ruch trwa 220ms, a klatka zmienia się co 50ms. Myślę, że zrozumiesz jak to działa i nie muszę Ci tego tłumaczyć.

    Coś w rodzaju pozycji gracza na mapie:

    W kodzie JS przecież masz:
    Kod:
    var x=0;  
    var y=0;
    Jeżeli chcesz je wyświetlić na stronie:

    - W kodzie HTML utwórz blok o id `#coords`:
    Kod html:
    <div id="coords">0:0</div>
    - W kodzie JS dodaj ten kod:
    Kod:
    jQuery( "#coords" ).html( x + ":" + y );
    Najlepiej dodaj go w sekcji "Jeżeli mogę iść", tutaj:

    Kod:
    function send(ox,oy,kierunek){  
    if(go){
        $.ajax({  
            type: "POST",  
            url: "idz.php",  
            data:"x="+(x+ox)+"&y="+(y+oy), 
                success: function(msg){  
                    if(msg){  
                        go=false;
    
                        //jeżeli mogę iść
                    }
                }  
            });  
        }
    }
    Poprawnie wyświetlanie postaci:

    Musisz dodać jeden `setTimeout` tam gdzie zmienia się szybkość poruszania postaci (chyba, że już to zrobiłeś). Podaj wielkość obrazka, być może musisz też pogrzebać tu:

    Kod:
    function animation(klatka,kierunek){  
     $("#gracz").css("background-position",(-klatka*24)+"px "+(-kierunek*32)+"px");  
     }
    ... wszystko powinno działać, ale nie testowałem.
    Ostatnio edytowane przez Bartek ; 06-09-2014 o 09:28

  3. #3
    Zarejestrowany
    Dołączył
    Aug 2014
    Posty
    11

    Domyślnie

    Z kordami dzięki za pomoc działa. Ogarniam o co chodzi z funkcją setTimeout, ale jak zmniejszyłem wartości, to postać dalej biega jak szalona po mapie. Co do złego wyświetlania się obrazka to sytuacja wygląda tak: http://scr.hu/0dt9/hf4g3
    Jedna klatka ma 32x48 pikseli, mam to tam po zmieniane, ale jak widzisz obrazek zamiast wyświetlać się na 1 klatce to zaczyna od drugiej. Stosuję takie grafiki obrazków: http://scr.hu/0dt9/mv4y0

  4. #4
    Zarejestrowany
    Dołączył
    Aug 2014
    Posty
    11

    Domyślnie

    Edit: (z edytowałbym, ale nie mogłem znaleźć opcji edycji)
    Udało mi się spowolnić postać, ale dalej źle wyświetla ją mi się klatki.

  5. #5
    Aktywny
    Dołączył
    Dec 2011
    Posty
    273

    Domyślnie

    Przetestuj:

    Kod:
    setTimeout("map_poz(x+=6,y);animation(0,3);",70);
    setTimeout("map_poz(x+=6,y);animation(1,3);",140);
    setTimeout("map_poz(x+=6,y);animation(2,3);",210);
    setTimeout("map_poz(x+=6,y);animation(3,3);",280);
    setTimeout("map_poz(x+=6,y);animation(2,3);",350);
    setTimeout("map_poz(x+=6,y);animation(1,3);",420);

  6. #6
    Zarejestrowany
    Dołączył
    Aug 2014
    Posty
    11

    Domyślnie

    Jak wstawiłem kod:
    Kod:
    setTimeout("map_poz(x+=6,y);animation(0,3);",70);
    setTimeout("map_poz(x+=6,y);animation(1,3);",140);
    setTimeout("map_poz(x+=6,y);animation(2,3);",210);
    setTimeout("map_poz(x+=6,y);animation(3,3);",280);
    setTimeout("map_poz(x+=6,y);animation(2,3);",350);
    setTimeout("map_poz(x+=6,y);animation(1,3);",420);
    to w ogóle nie zadziałało, ale jak wstawiłem kod:
    Kod:
     
                                    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(0,3"+kierunek+");",70);
    				setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(1,3"+kierunek+");",140);
    				setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(2,3"+kierunek+");",210);
    				setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(3,3"+kierunek+");",280);
    				setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(2,3"+kierunek+");",350);
    				setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(1,3"+kierunek+");",420);
    to postać chodziła, tylko, że animacja odtwarzała się totalnie inaczej i dalej wyświetlało się jak wcześniej.

  7. #7
    Zarejestrowany
    Dołączył
    Jun 2014
    Posty
    15

    Domyślnie

    Cześć. Widzę, że temat się zapuścił troszkę, więc podpowiem Ci, że raczej w funkcji setTimeout problem nie leży. Pogrzeb trochę tu:

    Kod:
    	$("div#d").click(function(){
    		send(0,-32,0);
    	});
    
    	$("div#l").click(function(){
    		send(32,0,1);
    	});
    
    	$("div#p").click(function(){
    		send(-32,0,2);
    	});
    
    	$("div#g").click(function(){
    		send(0,32,3);
    	});
    Musisz kombinować i zmieniać w najróżniejszy sposób te liczby, przynajmniej takie jest moje zdanie.

  8. #8
    Aktywny
    Dołączył
    Dec 2011
    Posty
    273

    Domyślnie

    Charset 1 - ten `charset` ma poukładane klatki w innym kierunku niż oryginalny: (Charset 2), tak więc Trzebu ma rację. Kod podany wyżej powinien działać:

    Kod:
    $("div#d").click(function(){
    	send(0,-32,0);
    });
    
    $("div#l").click(function(){
    	send(32,0,1);
    });
    
    $("div#p").click(function(){
    	send(-32,0,2);
    });
    
    $("div#g").click(function(){
    	send(0,32,3);
    });
    Na początku źle zrozumiałem problem, ale w `setTimeout` też możesz pogrzebać, bo Twój `charset` ma 4 klatki w każdym kierunku a nie 3.

    Kod:
    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(0,"+kierunek+");", 70);
    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(1,"+kierunek+");", 140);
    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(2,"+kierunek+");", 210);
    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(3,"+kierunek+");", 280);
    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(2,"+kierunek+");", 350);
    setTimeout("map_poz(x+="+(ox/6)+",y+="+(oy/6)+");animation(1,"+kierunek+");", 420);
    setTimeout("go=true;", 450);

  9. #9
    Zarejestrowany
    Dołączył
    Jun 2014
    Posty
    15

    Domyślnie

    Też zmagam się z tym problemem od dłuższego czasu. Jak dla mnie to kod powinien wyglądać jakoś tak:
    Kod:
    $("div#d").click(function(){
    	send(0,0,-32,0);
    });
    
    $("div#l").click(function(){
    	send(32,0,1,0);
    });
    
    $("div#p").click(function(){
    	send(-32,0,0,2);
    });
    
    $("div#g").click(function(){
    	send(0,32,3,0);
    });
    Ponieważ:
    tu mamy 4 kolumny i 4 wiersze
    http://scr.hu/0dt9/g012o
    a tu 4 wiersze i 3 kolumny:
    http://forum.mmocenter.pl/attachment...po-mapie-1.png
    Więc myślę, że powodem wszystkich problemów jest nie odtwarzanie jednej kolumny klatek i dlatego postać kiedy stoi w bez ruchu to zamiast wyświetlać pierwszą kolumnę to wyświetla drugą, sam mam z tym problemy..

  10. #10
    Zarejestrowany
    Dołączył
    Jun 2014
    Posty
    15

    Domyślnie

    Witam ponownie. Tak więc rozkmina życia została rozkminiona i doszedłem do tego jak zrobić aby postać stała "prosto"... Kolega zastosuje taki kod i wszystko powinno działać:
    Kod:
    setTimeout("map_poz(x+="+(ox/4)+",y+="+(oy/4)+");animation(1,"+kierunek+");",100);
    setTimeout("map_poz(x+="+(ox/4)+",y+="+(oy/4)+");animation(2,"+kierunek+");",200);
    setTimeout("map_poz(x+="+(ox/4)+",y+="+(oy/4)+");animation(1,"+kierunek+");",300);
    setTimeout("map_poz(x+="+(ox/4)+",y+="+(oy/4)+");animation(2,"+kierunek+");",400);
    setTimeout("go=true;",220);

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. ograniczenie chodzenia postaci 2d?
    Przez kawus121 w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 8
    Ostatni post / autor: 27-07-2012, 15:40
  2. Animacja chodzenia po mapie
    Przez zahir w dziale Problemy przy tworzeniu własnej gry
    Odpowiedzi: 1
    Ostatni post / autor: 29-11-2011, 07:25
  3. [Mapa]Chodzenia
    Przez Gomez w dziale JavaScript/AJAX
    Odpowiedzi: 10
    Ostatni post / autor: 21-06-2009, 14:49
  4. Poprawki.
    Przez Xca w dziale Administracja
    Odpowiedzi: 1
    Ostatni post / autor: 17-02-2008, 15:57

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
  •