kt1117 Opublikowano 29 Lipca 2011 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.
m@rcixxx Opublikowano 29 Lipca 2011 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 ).
kt1117 Opublikowano 29 Lipca 2011 Autor 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.
m@rcixxx Opublikowano 29 Lipca 2011 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.
kt1117 Opublikowano 29 Lipca 2011 Autor 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.
Bedziom Opublikowano 29 Lipca 2011 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 :)
kt1117 Opublikowano 30 Lipca 2011 Autor 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.
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ę