Nirvan Opublikowano 23 Października 2011 Udostępnij Opublikowano 23 Października 2011 Mam problem z place_meeting, chce zrobić naskakiwanie od dołu i wszystko działa ale gdy gracz stoi na jednej platformie i dotyka drugą na poziomie tułowiu to gracz reaguje tak jakby stał w niej, jakby w nią wniknął i nie może się ruszyć. Wydaje mi się że to place meeting czyta x,y z obiektem przy zetknięciu z maską i liczy je od tej maski właśnie. Jak to naprawić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ra3l Opublikowano 23 Października 2011 Udostępnij Opublikowano 23 Października 2011 Może spróbuj zmienić środek sprita, na dół. Moim zdaniem może pomóc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 23 Października 2011 Autor Udostępnij Opublikowano 23 Października 2011 To przez maskę, po zwężeniu jej do nóg działa poprawnie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ra3l Opublikowano 23 Października 2011 Udostępnij Opublikowano 23 Października 2011 Więc jest tak jak pisałem Ci na gg. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 23 Października 2011 Autor Udostępnij Opublikowano 23 Października 2011 Ale nie poradziliśmy sobie z tym, będzie trzeba kombinować z kolizjami z innymi obiektami. Może ktoś ma jakiś dobry pomysł? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 23 Października 2011 Udostępnij Opublikowano 23 Października 2011 Zapewne gdzieś masz kod wyglądający w dużym uproszczeniu tak: GML if !( place_free( x, y + predkosc_spadania ) ) predkosc_spadania = 0; To właśnie w tym miejscu musisz zapobiec dziwnemu "wdrożeniu" w platformę, na którą chcesz naskoczyć od dołu. Rozwiązać to możesz na wiele sposobów. Jednym z nich jest sprawdzanie, czy jakaś instancja znajduje się na tobie. Jeśli tak, to powyższy warunek nie powinien zostać spełniony. I gotowe. Jeśli chcesz, to mogę podesłać przykład. Edit: W pełni funkcjonalny kod. Nie prześlę przykładu, gdyż nie mam zamiaru się teraz bawić w upload przy tak słabym necie. Przyrzekam, że kod działa w 100% ;) . GML if ( keyboard_check( vk_left ) ) v -= a; else if ( keyboard_check( vk_right ) ) v += a; else { if ( v > 0 ) v = max( v - a, 0 ); else v = min( v + a, 0 ); } if ( !place_meeting( x + v, y, Block ) || place_meeting( x, y, Block ) ) x += v; else { if ( v > 0 ) move_contact_all( 0, 0 ); else if ( v < 0 ) move_contact_all( 180, 0 ); v = 0; } if ( gv >= 0 ) { if ( !place_meeting( x, y + 1, Block ) || ( place_meeting( x, y, Block ) && gv >= 0 && instance_place( x, y, Block ) == instance_place( x, y + gv, Block ) ) ) gv += g; else { gv = 0; if ( keyboard_check( vk_up ) && !place_meeting( x, y, Block ) ) { gv = -10; y += gv; } } } else { y += gv; gv += g; } if ( !place_meeting( x, y + gv, Block ) || place_meeting( x, y, Block ) ) y += gv; else if ( !place_meeting( x, y, Block ) ) { while( place_meeting( x, y + 1, Block ) ) y += 1; gv = 0; } Jutro wrzucę pewnie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 25 Października 2011 Autor Udostępnij Opublikowano 25 Października 2011 Poruszanie się muszę mieć tak zrobione i mam problem z rozwiązaniem problemu. GML { yy=0; ok=0; while(yy<=max_y&&ok=0) { if ( place_meeting(x+v,y-yy,par_plat) ) { x+=v; if (place_meeting(x,y+1,par_plat) &&vspeed=0) y-=yy; ok=1; } yy+=1; } if (place_meeting(x,y+max_y, par_plat)&&vspeed=0) move_contact_all(270,max_y); } Kombinowałem z instance_place bo nie znałem tego wcześniej, ale już dzisiaj nie mam czasu żeby dalej kombinować :P W każdym bądź razie nic sęsownego jeszcze nie zrobiłem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 25 Października 2011 Udostępnij Opublikowano 25 Października 2011 Sprawdzaj place_meeting( x, y, Block ) ;) . Jest to moment, gdy właśnie naskakujesz na platformę, a raczej na niej jesteś. Wówczas warunek ten koliduje z innymi place_meetingami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 25 Października 2011 Autor Udostępnij Opublikowano 25 Października 2011 W jakim sęsie sprawdzaj? :P Nie skumałem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sernat Opublikowano 25 Października 2011 Udostępnij Opublikowano 25 Października 2011 dotyka drugą na poziomie tułowiu to gracz reaguje tak jakby stał w niej, jakby w nią wniknął i nie może się ruszyć. Wynika to z tego, że gracz właśnie znajduje się na platformie, czyli piksel pod nim jest platforma, piksel nad nim jest platforma itd. A to wtedy tworzy komplikacje, ponieważ nie współgra z kodem: place_meeting(x,y+1,par_plat) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 25 Października 2011 Autor Udostępnij Opublikowano 25 Października 2011 No tak, ale dalej nie wiem jak to naprawić :P warunek if ( place_meeting(x+v,y-yy,par_plat) ) musi być żeby poruszanie działało mi tak jak chce. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muuuuczek567 Opublikowano 25 Października 2011 Udostępnij Opublikowano 25 Października 2011 Ja zawsze w platformówkach robiłem tak, że bohater ma "y" platformy, na której stoi minus wysokość sprite'a bohatera. Tylko jeden collision_point w Stepie. Zero place_meeting. Oczywiście działa tylko z poziomymi platformami. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 26 Października 2011 Autor Udostępnij Opublikowano 26 Października 2011 No właśnie, poziome. U mnie musi na niepoziomych i podnosić się przy zmianie wysokości maski. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 24 Listopada 2011 Autor Udostępnij Opublikowano 24 Listopada 2011 Problem cały czas pozostaje nierozwiązany, postać musi umieć poruszać się nie tylko po płaskich platformach, u mnie kod poruszania wygląda tak: GML Step: yy=0; ok=0; while(yy<=max_y&&ok=0) { if!( ( place_meeting(x+v,y-yy,par_solidobj) ) || ( place_meeting(x+v,y-yy,par_plat)) ) { x+=v; if( (place_meeting(x,y+1,par_plat) ) &&vspeed=0) y-=yy; ok=1; } yy+=1; } if ((place_meeting(x,y+max_y, par_plat))&&vspeed=0) move_contact_all(270,max_y); } GML Kolizja platformy z graczem: if other.y+60 < y+sprite_get_yoffset(sprite_index)/2 { with(other) { if (vspeed>0) && trough=false { if(place_meeting(x,y+vspeed, par_platGT)){move_contact_all(270,vspeed);} //i tu dalej blablabla } } } Gracz i przeciwniczy ciągle utykają gdy trafią na platforme np na wysokości swojej głowy. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nirvan Opublikowano 1 Grudnia 2011 Autor Udostępnij Opublikowano 1 Grudnia 2011 To może ktoś podpowie czego użyć żeby tak zrobić? Bo jak narazie to z collision line kipsko mi idzie. 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ę