Adriann Opublikowano 7 Stycznia 2017 Udostępnij Opublikowano 7 Stycznia 2017 Witajcie! Przychodzę dziś do was z takim dość dziwnym problemem, otóż mam w grze przeciwnika który skacze w stronę gracza. step: GML ///Poruszanie if tryb=1 && (place_meeting(x,y+(vsp),blok_parent)) && alarm[1]=-1 //Przygotowanie do skoku {alarm[1]=10 movespeed=0 sprite_index=spr_jumper01_stoi} //Skakanie if tryb=2 && alarm[2]=-1 {vsp=-5 movespeed=2 dir=-1 alarm[2]=1 sprite_index=spr_jumper01_atk} if tryb=3 && alarm[2]=-1 {vsp=-5 movespeed=2 dir=1 alarm[2]=1 sprite_index=spr_jumper01_atk} hsp = dir * movespeed; vsp += grav; image_xscale=dir; //Horizontal Collision if (place_meeting(x+hsp,y,blok_parent)) { while(!place_meeting(x+sign(hsp),y,blok_parent)) { x += sign(hsp); } hsp = 0; dir *= -1; } x += hsp; //Vertical Collision if (place_meeting(x,y+vsp,blok_parent)) { while(!place_meeting(x,y+sign(vsp),blok_parent)) { y += sign(vsp); } vsp = 0; } y += vsp; Alarm[1] GML if instance_exists(o_gracz) { if o_gracz.x<x tryb=2 if o_gracz.x>x tryb=3 } Alarm[2] GML tryb=1 W alarmach wybiera kierunek i resetuje całość. I to wszytko pięknie działa. ALE! Kiedy próbuję zrobić bardziej skomplikowanego przeciwnika na zasadzie: GML if akcja=1{kod na chodzenie} if akcja=2{kod na atakowanie} if akcja=3 {if tryb=1 && (place_meeting(x,y+(vsp),blok_parent)) && alarm[1]=-1 {alarm[1]=10 movespeed=0 sprite_index=spr_jumper01_stoi} if tryb=2 && alarm[2]=-1 {vsp=-5 movespeed=2 dir=-1 alarm[2]=1 sprite_index=spr_jumper01_atk} if tryb=3 && alarm[2]=-1 {vsp=-5 movespeed=2 dir=1 alarm[2]=1 sprite_index=spr_jumper01_atk} } hsp = dir * movespeed; vsp += grav; image_xscale=dir; kolizje jw. To skakanie już nie działa, zatrzymuje się na akcji nr 3 i trybie 1szym, tak jakby nie czytał kolizji bo ani alarm ani animacja się nie uruchamiają. A dodałem tylko nowy warunek akcja. Halp plis:o Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 7 Stycznia 2017 Filar Społeczności Udostępnij Opublikowano 7 Stycznia 2017 hmm kurde, chętnie bym ci pomógł ale średnio to ogarniam :/ 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 A kiedy sie zmieniaja te tryby? Bo w tym kodzie tego nie ma Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 7 Stycznia 2017 Autor Udostępnij Opublikowano 7 Stycznia 2017 Jak mówię w alacmach, dodam mały edit 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 widzę tutaj powodu, czemu nie działa. Jak dasz akcja=3 od razu przed warunkiem if akcja=3 to zacznie działać skakanie i poruszanie? Jedna rzecz mi się tylko rzuciła w oczy, że jak przeciwnik uderzy głową w sufit to zacznie skakać :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 7 Stycznia 2017 Autor Udostępnij Opublikowano 7 Stycznia 2017 No właśnie, mam wrażenie że miejsce gdzie wstawimy kod na kolizje może mieć jakieś znaczenie w tym wypadku. W zasadzie największym problemem jest chyba to że owa postać nie zmienia kierunku przy kolizji ze ścianą co do tej pory robiła bez problemów. (brakuje animacji chodzenia) Dodatkowo bez zmian, w końcu zatrzymuje się na akcji 3 trybie 1. To cały kod na postać z chodzeniem: GML ///Poruszanie //0; stoi 1; idzie; 2 atakuje; 3 skacze; if akcja=0 && alarm[1]=-1 //stoi { if (place_meeting(x,y+vsp,blok_parent)) {sprite_index=spr_boss1_stoi} alarm[1]=10} if akcja=1 && alarm[1]=-1 //idzie {hsp = dir * movespeed; alarm[1]=20//+random(10) sprite_index=spr_boss1_stoi; } if akcja=3 //skacze {if tryb=1 && (place_meeting(x,y+(vsp),blok_parent)) && alarm[2]=-1 {//sprite_index=spr_boss1_jump; //vsp=-5; alarm[2]=5 movespeed=0 sprite_index=spr_boss1_jump_prepare} //akcja=0; if tryb=2 && alarm[3]=-1 {vsp=-5 movespeed=2 dir=-1 alarm[3]=10 sprite_index=spr_boss1_jump} if tryb=3 && alarm[3]=-1 {vsp=-5 movespeed=2 dir=1 alarm[3]=10 sprite_index=spr_boss1_jump} } vsp += grav; image_xscale=dir; //Horizontal Collision if (place_meeting(x+hsp,y,blok_parent)) { while(!place_meeting(x+sign(hsp),y,blok_parent)) { x += sign(hsp); } hsp = 0; dir *= -1; } x += hsp; //Vertical Collision if (place_meeting(x,y+vsp,blok_parent)) { while(!place_meeting(x,y+sign(vsp),blok_parent)) { y += sign(vsp); } vsp = 0; } y += vsp; Alarm[1] GML akcja=choose(1,3); Alarm[2] GML if o_gracz.x<x tryb=2 if o_gracz.x>x tryb=3 Alarm[3] GML tryb=1 Ps: tak boss ma maskę i z lewej strony pojawia się niewidzialna ściana. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Adriann Opublikowano 7 Stycznia 2017 Autor Udostępnij Opublikowano 7 Stycznia 2017 Problem rozwiązany. Chodziło o kolejność działań i niepotrzebne umieszczenie hsp = dir * movespeed; w warunku. Wstawiłem to i ten sam kod dotyczący vsp na początek i wszystko pięknie działa;) 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 Ale weź ogarnij jakiś lepszy styl pisania :P Bo nie widać gdzie się zaczyna klamra a gdzie kończy i musiałem je liczyć. 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ę