Estremo_PL Opublikowano 7 Stycznia 2017 Udostępnij Opublikowano 7 Stycznia 2017 Przeciwnik ma za zadanie stać w miejscu i skakać i na początku wszystko działa ale po około 20 sekundach przestaje skakać i stoi w miejscu (animacja wciąż trwa). kod wygląda tak [Create] skok = choose(1,2,3); if skok = 1 then image_index = 0; if skok = 2 then image_index = 1; if skok = 3 then image_index = 2; image_speed = 0.05; friction = 0.28; [step] if image_index = 1 then vspeed = -12; if place_meeting(x,y-3,object1) { effect_create_below(ef_explosion,x,y,2,c_black) instance_destroy() with(object1) vspeed = -7; } oraz w Step jest użyte 5 klocków które chętnie bym przeniósł do kodu (pochodzą z pewnego poradnika) Start of a block set the vertical speed 0.6 relative check collission x = 0 y = vspeed, only solid, relative set the vertical speed 0 End of a block Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 7 Stycznia 2017 Udostępnij Opublikowano 7 Stycznia 2017 zobacz czy zadziała if round(image_index) = 1 albo nawet chyba lepiej będzie tak: if ( image_index > 1-image_speed && image_index <= 1+image_speed ) Start of a block set the vertical speed 0.6 relative check collission x = 0 y = vspeed, only solid, relative set the vertical speed 0 End of a block Prawdopodobnie to będzie coś takiego ale nie dam głowy uciąć bo z klocków korzystałem 15 lat temu :P GML vspeed += 0.6; if ( place_free(x, y+vspeed) ) { vspeed = 0; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Estremo_PL Opublikowano 7 Stycznia 2017 Autor Udostępnij Opublikowano 7 Stycznia 2017 zobacz czy zadziała if round(image_index) = 1 albo nawet chyba lepiej będzie tak: if ( image_index > 1-image_speed && image_index <= 1+image_speed ) Prawdopodobnie to będzie coś takiego ale nie dam głowy uciąć bo z klocków korzystałem 15 lat temu :P GMLvspeed += 0.6; if ( place_free(x, y+vspeed) ) { vspeed = 0; } niestety nie działa to ale te klocki dają grawitacje, (zwykła coś mi dziwnie działa ale jeszcze popróbuję może się uda) a bardziej mi chodzi o to czemu po chwili przeciwnik przestaje skakać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 7 Stycznia 2017 Udostępnij Opublikowano 7 Stycznia 2017 Nie zadziałało to co napisałem wyżej? tak to miało wyglądać: GML if ( round(image_index) = 1 ) then vspeed = -12; if place_meeting(x,y-3,object1) { effect_create_below(ef_explosion,x,y,2,c_black) instance_destroy() with(object1) vspeed = -7; } albo tak: GML if ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12; if place_meeting(x,y-3,object1) { effect_create_below(ef_explosion,x,y,2,c_black) instance_destroy() with(object1) vspeed = -7; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Estremo_PL Opublikowano 9 Stycznia 2017 Autor Udostępnij Opublikowano 9 Stycznia 2017 Nie zadziałało to co napisałem wyżej? tak to miało wyglądać: GMLif ( round(image_index) = 1 ) then vspeed = -12; if place_meeting(x,y-3,object1) { effect_create_below(ef_explosion,x,y,2,c_black) instance_destroy() with(object1) vspeed = -7; } albo tak: GMLif ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12; if place_meeting(x,y-3,object1) { effect_create_below(ef_explosion,x,y,2,c_black) instance_destroy() with(object1) vspeed = -7; } zadziałało to GML if ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12; if place_meeting(x,y-3,object1) { effect_create_below(ef_explosion,x,y,2,c_black) instance_destroy() with(object1) vspeed = -7; } mógłbyś mi teraz wytłumaczyć dokładnie działanie tej linijki if ( image_index > 1-image_speed && image_index <= 1+image_speed ) then vspeed = -12; i czemu moja wersja po chwili się psuła, i czy chcesz aby cię umieścić w twórcach w przedziale ,,podziękowania dla"? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 9 Stycznia 2017 Udostępnij Opublikowano 9 Stycznia 2017 Psuło się bo image_index zaczęło przyjmować wartości zmienno-przecinkowe ze względu na zmianę image_speed W pewnym momencie image_index zaczęło przeskakiwać przez wartość image_index == 1 z twojego warunku. No więc trzeba było rozszerzyć to tak by nie sprawdzał konkretnej liczby a zamiast tego zakres. Zakres od image_index-image_speed do image_index+image_speed; Wtedy jest pewność że warunek się spełni i nie przeskoczy przez twoją żądaną jedynkę. 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ę