kt1117 Opublikowano 29 Lipca 2011 Udostępnij Opublikowano 29 Lipca 2011 Witam, podchodzę do tego problemu już któryś raz, ale nie mogę go rozwiązać. Więc jest problem, ponieważ mam obiekt A, ma on robić za element terenu. Pod tym obiektem znajduje się zawsze inny element terenu B, ale zniszczalny. I teraz gdy element B zostanie zniszczony, element A ma spaść. Tylko, że może na swojej drodze spotkać element C, czyli obiekt, który jest głównym terenem. Niezniszczalny, nieprzesuwalny. I w tym problem, że element A musi być solid, bo bohater musi po nim chodzić. Wiadomo też, że nie powinno się dawać solid obiektowi w ruchu. Dodatkowo obiekt A powinien obrócić się w lewo, gdy jest podparty tylko z prawej strony i odwrotnie. mój kod jest taki: GML (step) n=0 while (n<129) { if !place_empty(x+lengthdir_x(n,image_angle) ,y+lengthdir_y(n,image_angle)+1) { ok=1 } n+=1 } if ok=0 image_angle+=1 while (n<256) { if !place_empty(x+lengthdir_x(n,image_angle) ,y+lengthdir_y(n,image_angle)+1) { ok=1 } n+=1 } if ok=0 image_angle-=1 GML (Begin step) a=0 GML (End step) if a=0 y+=2 GML (kolizja z C z B taka sama) move_contact_solid(270,vspeed) vspeed=0 a=1 Obiekt A niestety nie obraca się, i dopóki na początku gry nie spadnie, gra zamula. Prosiłbym o pomoc w zrozumieniu problemu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 29 Lipca 2011 Udostępnij Opublikowano 29 Lipca 2011 1. Odznacz solid obiektowi A, daj mu parenta i niech gracz sprawdza i obiekty solid i tego parenta równocześnie gdy spada/idzie. 2. Obracanie zrób prostym warunkiem, że jak A dotyka z lewej strony solida lub co tam chcesz i równocześnie nie dotyka z drugiej to się obraca np. prawo, jeśli jest na odwrót to w lewo. Zrobiłem tak w mojej platformówce z fizyką i działa dobrze w 90%. 3. Muli Ci bo masz dużą maskę obiektu A. zmniejsz ją do możliwie najmniejszych rozmiarów (np kreskę zrób ). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 29 Lipca 2011 Autor Udostępnij Opublikowano 29 Lipca 2011 Parent ma mieć solid? E:Jak A nie ma solid to bohater przelatuje. Kombinowałem zmniejszać y w chwili gdy występuje kolizja na lini od bohatera do przestrzeni pod bohaterem, ale to prawie nic nie daje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
m@rcixxx Opublikowano 29 Lipca 2011 Udostępnij Opublikowano 29 Lipca 2011 Parent ma mieć solid? Nie. Dorabiasz obiekt 'parent_A' i bohater będzie sprawdzał tak GML place_free(x,y+10+vspeed) && ! place_meeting(x,y+10+vspeed,parent_A) { gravity=0.1 } else { gravity=0 } Edit: oczywiście obiektowi A ustawiasz parent jako parent_A. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 29 Lipca 2011 Autor Udostępnij Opublikowano 29 Lipca 2011 Coś tam wykombinowałem, i działa mniej więcej. Dzięki za pomoc. Jeszcze pobawię się z maską, bo mam wysokość 1 px i to powoduje, że nieraz hero przelatuje. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Bedziom Opublikowano 29 Lipca 2011 Udostępnij Opublikowano 29 Lipca 2011 A mógłbyś udostępnić to, co zrobiłeś, i działa? Może komuś jeszcze (np. mi) się to przyda :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 29 Lipca 2011 Udostępnij Opublikowano 29 Lipca 2011 Bedziom wysil się i zrób coś sam. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 30 Lipca 2011 Autor Udostępnij Opublikowano 30 Lipca 2011 Mogę udostępnić. Ale nie działa to w stu procentach. GML (Step) if image_angle!=0 { ky=y+lengthdir_y(256,image_angle) kx=x+lengthdir_x(256,image_angle) sry=y+lengthdir_y(128,image_angle) srx=x+lengthdir_x(128,image_angle) } if x>kx roz=10 else roz=-10 if collision_line(x+roz,y+33,srx-roz,sry+33,all,1,0) image_angle-=1 if collision_line(srx+roz,sry+33,kx-roz,ky+33,all,1,0) image_angle+=1 GML (Draw) draw_sprite_ext(sprite11,0,x,y,1,1,image_angle,image_blend,1) //ten kod w celu debugu draw_set_color(c_blue) draw_line(x+roz,y+32,srx-roz,sry+32) draw_set_color(c_green) draw_line(srx+roz,sry+32,kx-roz,ky+32) Te wszystkie 32 zamień na wysokość sprita. Reszta eventów z poprzedniego kodu. Wartość roz też zmień sobie. pod deską pojawią się kolorowe kreski, jak jedną "przerwiesz" to obiekt się przekręci. Później wywal ten kod z drawa "ten do debugu". Następnie w kodzie bohatera do każdego if place_free dopisz && !place_meeting, tylko z odwróconym znakiem. I jak przed place_free masz wykrzyknik to && zmień na or. 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ę