Pablo-GM Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Witam w większości moich produkcji przewija się ten sam problem związany z kolizją pocisku , postanowiłem w końcu się za to zabrać , a że skoro nie wychodziło to sięgam rady specjalistów . Postaram się teraz opisać nieco jaśniej mój "kłopot" - mianowicie jeśli wdaje się w strzelaninę i odejdę na odpowiedni dystans pocisk przelatuje tuż obok mnie . Wygląda to tak jakby pocisk zamiast lecieć jednym, prostym ciągiem , robił to " w częściach " . Dla jasności wrzucę obrazek z zaistniałą sytuacją : Do screena już ręcznie dorobiłem te " urywki " , bo nie mogłem ich uchwycić na obrazku . PS Próbowałem kombinować z maskami , ale efekt niestety nie był zadowalający ... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 12 Lutego 2012 Udostępnij Opublikowano 12 Lutego 2012 Bo w rzeczywistości pocisk robi owe urywki. By zapobiec takim uskokom, możesz użyć collision_line (dla xprevious i yprevious) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 12 Lutego 2012 Administratorzy Udostępnij Opublikowano 12 Lutego 2012 Jeśli prędkość pocisku jest większa niż jego długość, to w każdym kolejnym kroku (a jest ich tyle co wynosi room_speed, czyli defaultowo 30) na kilku pikselach kolizji nie ma, jednak jeśli prędkość pocisku < szerokości jego i postaci, to powinno być ok. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 13 Lutego 2012 Autor Udostępnij Opublikowano 13 Lutego 2012 Jeśli prędkość pocisku jest większa niż jego długość, to w każdym kolejnym kroku (a jest ich tyle co wynosi room_speed, czyli defaultowo 30) na kilku pikselach kolizji nie ma, jednak jeśli prędkość pocisku < szerokości jego i postaci, to powinno być ok. No faktycznie , ale spójrzmy na to z innej strony . Muszę teraz przykładowo zmieniać speed pocisku z 20 na 4 , a to jest diametralna zmiana . Czy jest jeszcze jakaś inna możliwość ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 GML if collsion_line(x,y,xprevious,yprevious,wrog,0,0){ var xx,yy,kolizja; xx=xprevious yy=yprevious kolizja=collision_point(xx,yy,wrog,0,0) while(kolizja<=0){ xx+=hspeed/10 yy+=vspeed/10 kolizja=collision_point(xx,yy,worg,0,0) } with(kolizja){ odjecie hp } } optymalniej bedzie wysukiwaniem binarnym, platyna pisal Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
adam014 Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 Robisz pocisk długości 20px z początkiem 4px swojego, reszta przeźroczysta i zmieniasz kolizje na cały sprite ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 karolo320, słyszałeś o do...while? :) Po za tym nie wiem co Ty w ogóle liczysz. Wystarczy sprawdzić kolizję po linii i wywołać domyślne zdarzenie kolizji, które już ma. GML collision = collision_line( xprevious, yprevious, x, y, wrog, true, true ); if( collision != noone ) { event_perform( ev_collision, collision.object_index ); with( collision ) { event_perform( ev_collision, other.object_index ); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 licze pierwszego napotkanego wroga, a while dobrze uzyte zapomnialem dac with(kolizja)odjecie hp Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 1. collision_line nie collsion_line. 2. hspeed i vspeed równe jest 0 jeśli manipuluje się bezpośrednio na x i y. 3. Wystarczy wykorzystać domyślne zdarzenie kolizji do odjęcia HP, on już tam ma cały kod do tego. 4. Jeśli już tak dokładny jesteś: GML object = collision_line( xprevious, yprevious, x, y, wrog, true, true ); if( object ) { sx = xprevious; sy = yprevious; ex = x; ey = y; while( point_distance( sx, sy, ex, ey ) > 5 ) { cx = ( sx + ex ) / 2; cy = ( sy + ey ) / 2; collision = collision_line( sx, sy, cx, cy, wrog, true, true ); if( collision != noone ) { ex = cx; ey = cy; object = collision; } else { sx = cx; sy = cy; } } event_perform( ev_collision, object.object_index ); with( object ) { event_perform( ev_collision, other.object_index ); } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 10 Lutego 2013 Autor Udostępnij Opublikowano 10 Lutego 2013 Odświeżam , problem nadal nierozwiązany , powyższe propozycje nic nie pomogły ; / Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 10 Lutego 2013 Udostępnij Opublikowano 10 Lutego 2013 IMO rozwiązanie z collision line jest prawidłowe, może coś źle robisz? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 10 Lutego 2013 Autor Udostępnij Opublikowano 10 Lutego 2013 Wklepuje to do stepu pocisku . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 10 Lutego 2013 Udostępnij Opublikowano 10 Lutego 2013 e: wszystko wydaje sie spoko, ale nie mam pojecia, co to sa te event_performy, wiec to może nie działać tu tylko, przeklej sobie kod i sprawdz czy dziala. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 10 Lutego 2013 Autor Udostępnij Opublikowano 10 Lutego 2013 W sumie z tym wydłużonym spritem efekt jest wystarczający , dziękuje za pomoc Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
karolo320 Opublikowano 11 Lutego 2013 Udostępnij Opublikowano 11 Lutego 2013 ale jak gość będzie stał blisko ciebie, ale z tyłu, to też go załapie. To dodaj sobie zmienna z image_xscale bohatera i sprawdzaj przy kolizji GML if(sign(hspeed)==zmiennaodxscalebohatera){ można } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 11 Lutego 2013 Autor Udostępnij Opublikowano 11 Lutego 2013 Nie no musze te kolizje zrobić dokładniej , na dłuższą metę to przypomina zwykłą fuszerkę ... Jakieś sugestie ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sminer Opublikowano 11 Lutego 2013 Udostępnij Opublikowano 11 Lutego 2013 Zawsze mozesz zmniejszyc predkosc pocisku i ludzika, a za to zwiekszyc roomspeed. Moze nie najlepsze rozwiazanie, ale pomoc moze :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 11 Lutego 2013 Autor Udostępnij Opublikowano 11 Lutego 2013 Edytowałem swój pocisk aby działał z kodem Tymona , mimo wszystko strzał przelatuje jeszcze często , gęsto przez ścianę . Nie da rady zminimalizować tego do zera ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
trolu122 Opublikowano 12 Lutego 2013 Udostępnij Opublikowano 12 Lutego 2013 nie wiem co wy tyle kombinujecie w tym kodzie w stepie pocisku dajesz GML if collision_line(x,y,xprevious,yprevious,objekt_bohater,0,1) { //no i tutaj co ma być -hp, czy niszczenie pocisku nie wiem</span> i nie ma prawa nic ci przelatywać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
hopek Opublikowano 12 Lutego 2013 Udostępnij Opublikowano 12 Lutego 2013 zawsze można spróbować z GML repeat (speed) { zmiana x'a i y'greka if kolizja rób cośtam } choć nie wiem czy to najefektywniejsza metoda..... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 12 Lutego 2013 Autor Udostępnij Opublikowano 12 Lutego 2013 nie wiem co wy tyle kombinujecie w tym kodzie w stepie pocisku dajesz GML if collision_line(x,y,xprevious,yprevious,objekt_bohater,0,1) { //no i tutaj co ma być -hp, czy niszczenie pocisku nie wiem</span></span> i nie ma prawa nic ci przelatywać A jednak...:) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
trolu122 Opublikowano 12 Lutego 2013 Udostępnij Opublikowano 12 Lutego 2013 ale przez co ci te pociski przelatuja, przez bohatera? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 12 Lutego 2013 Autor Udostępnij Opublikowano 12 Lutego 2013 W tym przypadku , przez ściane Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
szmalu Opublikowano 12 Lutego 2013 Udostępnij Opublikowano 12 Lutego 2013 Tak dla pewności zapytam - a ustawiałeś ten kod też dla ściany? xD Czyli GML if collision_line(x,y,xprevious,yprevious,objekt_sciana,0,1) { //no i tutaj co ma być -hp, czy niszczenie pocisku nie wiem</span></span> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo-GM Opublikowano 13 Lutego 2013 Autor Udostępnij Opublikowano 13 Lutego 2013 Taaa , no trudno zostane przy rozwiązaniu Tymona. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 13 Lutego 2013 Udostępnij Opublikowano 13 Lutego 2013 Przedostatni agument powinien być 1 nie 0, ale to i tak nie powinno robić różnicy, kod musi działać na 100% ( poprawnie napisany ), imo po prostu coś źle robisz. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
trolu122 Opublikowano 13 Lutego 2013 Udostępnij Opublikowano 13 Lutego 2013 jeszcze jest możliwość że tą ściane masz zbudowaną z 2 bloków, i jesli pocisk będzie przechodził na ich złączeniu, że to tak określe, wtedy faktycznie może jeszcze przelatywać. poza tym nie mam pojęcia czemu sie tak może dzieć 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ę