Mleko Opublikowano 1 Października 2016 Udostępnij Opublikowano 1 Października 2016 Hej! :) Ostatnio troche programowalem i mam pewiem problem :o :o . Animacja działa w lewo, gdy ide w lewo do gory itd gdy ide w prawo nie działa, natomiast gdy ide w prawo i do góry to działa. GML //Zamienne W= keyboard_check(ord("W")); A= keyboard_check(ord("A")); S= keyboard_check(ord("S")); D= keyboard_check(ord("D")); //Poruszanie sie if W and place_free(x,y-moveSpeed) { y-= moveSpeed; mw= true; }else{ y-= 0; mw= false; } if A and place_free(x-moveSpeed,y) { x-= moveSpeed; ma= true; }else{ x+= 0; ma= false; } if S and place_free(x,y+moveSpeed) { y+= moveSpeed; ms= true; }else{ y+= 0; ms= false; } if D and place_free(x+moveSpeed,y) { x+= moveSpeed; md= true; }else{ x+= 0; md= false; } //Animacja if mw= true or ma= true or ms= true or md= true{ m= true; } if mw= false and ma= false and ms= false and md= true{ m= false; } if m= true { image_speed= 0.14; sprite_index= sHeroWalking;}else{ image_speed= 0.05; sprite_index= sHero;} if md= true { image_xscale= -1; }else{ if ma= true{ image_xscale= 1; }} Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 1 Października 2016 Udostępnij Opublikowano 1 Października 2016 Po pierwsze GML y-=0 x+=0 nie ma sensu. Dodając/odejmując 0 nie zmieniasz w żaden sposób wartości zmiennej. Sprawdzę resztę tego kodu jak wrócę do domu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mleko Opublikowano 1 Października 2016 Autor Udostępnij Opublikowano 1 Października 2016 Po pierwsze GML y-=0 x+=0 nie ma sensu. Dodając/odejmując 0 nie zmieniasz w żaden sposób wartości zmiennej. Sprawdzę resztę tego kodu jak wrócę do domu. Ok dzięki za uwagę :). Ok, poczekam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 1 Października 2016 Udostępnij Opublikowano 1 Października 2016 Myślę, że w GML if mw= false and ma= false and ms= false and md= true{ m= false; } powinno być GML if mw= false and ma= false and ms= false and md= false{ m= false; } Poza tym było kilka mniejszych błędów, więc wysyłam cały kod GML //Zmienne W= keyboard_check(ord("W")); A= keyboard_check(ord("A")); S= keyboard_check(ord("S")); D= keyboard_check(ord("D")); //Poruszanie sie if(W and place_free(x,y-moveSpeed)){ y-= moveSpeed; mw= true; }else{ mw= false; } if(A and place_free(x-moveSpeed,y)){ x-= moveSpeed; ma= true; }else{ ma= false; } if(S and place_free(x,y+moveSpeed)){ y+= moveSpeed; ms= true; }else{ ms= false; } if(D and place_free(x+moveSpeed,y)){ x+= moveSpeed; md= true; }else{ md= false; } //Animacja if(mw= true or ma= true or ms= true or md= true){ if(m=false){ m=true; } } if(mw= false and ma= false and ms= false and md= false){ if(m=true){ m=false; } } if(m= true){ image_speed= 0.14; sprite_index= sHeroWalking; }else{ if(sprite_index!=sHero){ image_speed= 0.05; sprite_index= sHero; } } if(md= true){ image_xscale= -1; }else{ if(ma= true){ image_xscale= 1; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mleko Opublikowano 2 Października 2016 Autor Udostępnij Opublikowano 2 Października 2016 Myślę, że w GML if mw= false and ma= false and ms= false and md= true{ m= false; } powinno być GML if mw= false and ma= false and ms= false and md= false{ m= false; } Poza tym było kilka mniejszych błędów, więc wysyłam cały kod GML //Zmienne W= keyboard_check(ord("W")); A= keyboard_check(ord("A")); S= keyboard_check(ord("S")); D= keyboard_check(ord("D")); //Poruszanie sie if(W and place_free(x,y-moveSpeed)){ y-= moveSpeed; mw= true; }else{ mw= false; } if(A and place_free(x-moveSpeed,y)){ x-= moveSpeed; ma= true; }else{ ma= false; } if(S and place_free(x,y+moveSpeed)){ y+= moveSpeed; ms= true; }else{ ms= false; } if(D and place_free(x+moveSpeed,y)){ x+= moveSpeed; md= true; }else{ md= false; } //Animacja if(mw= true or ma= true or ms= true or md= true){ if(m=false){ m=true; } } if(mw= false and ma= false and ms= false and md= false){ if(m=true){ m=false; } } if(m= true){ image_speed= 0.14; sprite_index= sHeroWalking; }else{ if(sprite_index!=sHero){ image_speed= 0.05; sprite_index= sHero; } } if(md= true){ image_xscale= -1; }else{ if(ma= true){ image_xscale= 1; } } O jacie dziękuje ale mam jeszcze 1 pytanie po co te nawiasy? () Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 2 Października 2016 Udostępnij Opublikowano 2 Października 2016 O jacie dziękuje ale mam jeszcze 1 pytanie po co te nawiasy? () W dużym skrócie: Kod jest bardziej czytelny Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 2 Października 2016 Udostępnij Opublikowano 2 Października 2016 A tak naprawdę: W każdym innym języku musiałbyć zamknąć sprawdzaną treść w nawias. GM tego nie wymaga, ale na to pozwala. Tak samo ze średnikami. Skoro już tu jestem: Cały kod lepiej przemyśleć. te całe WD/WS/M nie są potrzebne jeśli się przemyśli kod. GML //Zmienne W= keyboard_check(ord("W")); A= keyboard_check(ord("A")); S= keyboard_check(ord("S")); D= keyboard_check(ord("D")); var _walk = W | S | A | D; //Co to znaczy wyjasnie pod kodem //Chodzenie if W{ if place_free(x,y-moveSpeed){ y-=moveSpeed; sprite_index = sHeroWalking; image_speed = 0.14; image_xscale = 1; } } else if S{ //else if oznacza ze sprawdzi S tylko jesli nie trzymamy W. Oznacza to ze trzymajac jednoczesnie W oraz S, idziemy w gore(W) if place_free(x,y+moveSpeed){ y+=moveSpeed; sprite_index = sHeroWalking; image_speed = 0.14; image_xscale = 1; } } if D{ if place_free(x+moveSpeed,y){ x+=moveSpeed; sprite_index = sHeroWalking; image_speed = 0.14; image_xscale = 1; } } else if A{ //Analogicznie do W/S if place_free(x-moveSpeed,y){ x-=moveSpeed; sprite_index = sHeroWalking; image_speed = 0.14; image_xscale = -1; } } //Animacja stania if !_walk{ image_speed= 0.05; sprite_index= sHero; } Wyjaśnienie lini _walk = W | S | A | D;: Kiedy piszesz W = keyboard_check(ord("W")); zapisujesz do zmiennej W odpowiedź na to czy W jest wciśnięte czy nie. Ta odpowiedź brzmi TRUE albo FALSE. TRUE to 1, FALSE to 0. Te liczby bitowo wyglądają tak*: TRUE: 0x00000001 //Liczba bitowa na TRUE FALSE: 0x00000000 //Liczba bitowa na FALSE W swoim kodzie używasz słowa and. Zamiast and można napisać &&. Innym testem jest lub czyli or które też można zapisać tak: ||. Gdybyś zapisał coś takiego: GML if keyboard_check(ord("W")) || keyboard_check(ord("S")){ //Jakis kod } To jakiś kod by się wykonał jeśli wciśniesz W lub S. Więc co oznacza | ? Samo, pojedyńcze | to takie "LUB" sprawdzane w bitach, a nie logicznie. Co to oznacza: Bity mają zera lub jedynki, z nich składają się wartości, z nich składają się liczby które zapisujesz w zmiennych. Na przykład tak bitowo wyglądają liczby 27 i 45: 27: 00011011 45: 00101101 Bitowe LUB oznacza, że łączymy te dwie wartości w jedną. Wygląda to tak: Jeżeli w pierwszej LUB drugiej liczbie jest 1, zapisz 1. Jeżeli w obu jest 0, zapisz zero. czyli 27 | 45 to: 00011011 00101101 ----------- 00111111 Tak jak widzisz jeżeli w jednej liczbie(lub w obu) jest 1, to zapisujemy 1. Okej, ale jak to się ma do var _walk = W | S | A | D; ? Jak już mówiłem, w każdej z tych zmiennych ( W S A D ) mamy zapisane 1 lub 0 w zalezności czy przycisk jest wciśnięty. Robiąc taką linijkę kodu, zapisujemy do _walk 1 jeżeli którykolwiek przycisk został wciśnięty oraz 0 jeżeli żaden nie został wciśnięty. Przykładowo trzymamy D, ale żaden inny przycisk: W = 0 = 00000000 S = 0 = 00000000 A = 0 = 00000000 D = 1 = 00000001 --------------------- _walk = 00000001 Pomyślałem, że jeśli dostajesz odpowiedź na tacy to lepiej żebyś się czegoś nowego nauczył :jezor: * - Uproszczenie, GM robi to troche inaczej. Doswiadczeni userzy nie bijcie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 2 Października 2016 Udostępnij Opublikowano 2 Października 2016 A tak naprawdę: W każdym innym języku musiałbyć zamknąć sprawdzaną treść w nawias (edit) Nie napisałem tego bo pytał się tylko o GML Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 2 Października 2016 Udostępnij Opublikowano 2 Października 2016 No dobra, zaraz mi walniesz obszerną listę hipsterskich języków. Wszystkie największe / najpopularniejsze tego wymagają. Może skupmy się na temacie, a nie moim doborze słów? Edit: A co do informacji, mógłbyś dać mu złe zrozumienie programowania, mówiąc mu że to się robi tylko z powodów estetycznych. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dester Opublikowano 2 Października 2016 Udostępnij Opublikowano 2 Października 2016 Edit: A co do informacji, mógłbyś dać mu złe zrozumienie programowania, mówiąc mu że to się robi tylko z powodów estetycznych. W GML robi się to z powodów estetycznych, albo żeby ćwiczyć przyzwyczajenia. Tak jak ; oraz ==. Ale z tymi najpopularniejszymi językami to masz rację Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się