pankracy Opublikowano 9 Maja 2016 Udostępnij Opublikowano 9 Maja 2016 Cześć wszystkim. Myślę nad tym jak zrobić żeby obiekt,który umieszczę na wodzie (załóżmy jest to kawałek drewna itp)zachowywał się bardzo naturalnie,czyli falował.Jak wskoczę bohaterem na ten obiekt co jest na wodzie,to zacznie się on lekko kołysać. Ja rozumiem,że bez fizyki się nie obędzie? Jak to w ogóle zrobić? Może podam niżej kod mojego obiektu wody. create GML ///Ustawienia zmiennych kolorWody = merge_color(c_blue,c_aqua,.3); disturbance = 1; howLiquid = 1; image_alpha = .4; for(i=0;i<=image_xscale*4;i++){ wY = 0; vspd = 0; } End Step GML ///Aktualizowanie if notInView() { exit; } with instance_place(x,y,par_entity) { if bbox_bottom <= other.y+32 { var xPlace = round((x-other.x)/8); if xPlace >= 0 && xPlace <= other.image_xscale*4 { other.vspd[xPlace] += vspd/2*weight; } for(i=1;i<abs(round(vspd*weight));i++){ if xPlace-i >= 0 && xPlace-i <= other.image_xscale*4 { other.vspd[xPlace-i] += (vspd/2*weight)-sign(vspd)*i*1.5; } if xPlace+i >= 0 && xPlace+i <= other.image_xscale*4 { other.vspd[xPlace+i] += (vspd/2*weight)-sign(vspd)*i*1.5; } } } } repeat(disturbance*image_xscale) { vspd[irandom(image_xscale*4)] += choose(.4,-.4); } for(i=0;i<=image_xscale*4;i++){ vspd = max(min(vspd,32),-32); wY += vspd*howLiquid; wY = max(min(wY,32),-32); vspd -= wY*.1; if i = image_xscale*4 || i = 0 || position_meeting(x+(i-1)*8,y-1,obj_woda) || position_meeting(x+(i+1)*8,y-1,obj_woda) || position_meeting(x+i*8,y-1,par_podloze) { wY = 0; } else { wY= mean(wY,wY[i-0.15],wY[i+0.15]); //bug z tablicami teraz powinno byc ok;/ } } Draw GML ///Rysowanie wody if notInView() { exit; } draw_set_color(kolorWody); draw_primitive_begin(pr_trianglestrip); for(i=0;i<=image_xscale*4;i++){ if i == 0 || i == image_xscale*4 { draw_set_alpha(0); } else { draw_set_alpha(image_alpha); } draw_vertex(x+i*8,bbox_bottom+1); draw_vertex(x+i*8,y+wY); } draw_primitive_end(); draw_primitive_begin(pr_trianglestrip); for(i=0;i<=image_xscale*4;i++){ draw_set_alpha(0); draw_vertex(x+i*8,y+wY+1); draw_set_alpha(-wY*10); draw_vertex(x+i*8,y+wY); } draw_primitive_end(); draw_set_alpha(1); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 9 Maja 2016 Udostępnij Opublikowano 9 Maja 2016 korzystasz z gotowców? Może po prostu nie rozumiem kodu, ale tak na moje, gdybyś dał radę napisać taki kod, to falujący bloczek nie powinien być dla ciebie problemem. Nie mam pojęcia jak działa ten twój kod na wodę, ale jeśli to są fale, to może po prostu niech przechylenie to będzie różncia między najwyższym punktem fali i najniższym pod belką. Nie wiem, tak w mojej głowie to prezentuje się nawet ładnie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 12 Maja 2016 Autor Udostępnij Opublikowano 12 Maja 2016 korzystasz z gotowców? Może po prostu nie rozumiem kodu, ale tak na moje, gdybyś dał radę napisać taki kod, to falujący bloczek nie powinien być dla ciebie problemem. Nie mam pojęcia jak działa ten twój kod na wodę, ale jeśli to są fale, to może po prostu niech przechylenie to będzie różncia między najwyższym punktem fali i najniższym pod belką. Nie wiem, tak w mojej głowie to prezentuje się nawet ładnie. To nieistotne wodę mam kod wody działa bardzo dobrze..a temat brzmi "obiekt falujący na wodzie i reagujący na gracza jak na nim ustanie" Chodzi o to,że jak na wodzie umieszczę skrzynkę,kładkę cokolwiek,to ma się w miarę naturalnie ruszać jak moja woda.I unosić się na górnej części tafli wody. Tak jak np pumeks ,który jest lekki nie tonie tylko unosi się na wodzie..o coś takiego mi się rozchodzi,ktoś próbował coś takiego z was zrobić? Dlatego się zapytałem,czy bez fizyki można to zrobić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 12 Maja 2016 Udostępnij Opublikowano 12 Maja 2016 To nieistotne wodę mam kod wody działa bardzo dobrze..a temat brzmi "obiekt falujący na wodzie i reagujący na gracza jak na nim ustanie" Jeżeli nie możesz dodać feature do gry który połączy 2 obiekty to znaczy że oba działają źle. Powiem nawet że z fizyką się tego prawie nie da zrobić (bez pełnej symulacji wody, albo jakiś prowizorycznych trików). Żeby zrobić jakąś kłodę pływającą po wodzie musisz zrobić przynajmniej 3 stany: - Jak kłoda jest w powietrzu ma działać na nią grawitacja jak na każdy obiekt. - Jak kłoda jest pod wodą to ma działać na nią wyporność wody - Jak jakiś obiekt jest na kłodzie to ma na nią działać grawitacja obiektu. Poza tym musi ona sprawdzać kolizje z innymi obiektami ;) PS.: fajnie że coś tam starasz się wyłączać poza view ale można to wziąć jeszcze dalej i całkowicie wyłączyć wykonywanie eventu draw w obiekcie. ;) GML (step) if notInView() { visible=false } else { visible=true } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 12 Maja 2016 Autor Udostępnij Opublikowano 12 Maja 2016 Jeżeli nie możesz dodać feature do gry który połączy 2 obiekty to znaczy że oba działają źle. Powiem nawet że z fizyką się tego prawie nie da zrobić (bez pełnej symulacji wody, albo jakiś prowizorycznych trików). Żeby zrobić jakąś kłodę pływającą po wodzie musisz zrobić przynajmniej 3 stany: - Jak kłoda jest w powietrzu ma działać na nią grawitacja jak na każdy obiekt. - Jak kłoda jest pod wodą to ma działać na nią wyporność wody - Jak jakiś obiekt jest na kłodzie to ma na nią działać grawitacja obiektu. Poza tym musi ona sprawdzać kolizje z innymi obiektami ;) PS.: fajnie że coś tam starasz się wyłączać poza view ale można to wziąć jeszcze dalej i całkowicie wyłączyć wykonywanie eventu draw w obiekcie. ;) GML (step)if notInView() { visible=false } else { visible=true } Dzięki Threef za radę.Twoje rozwiązanie jest praktyczniejsze;) znacznie przyspieszyła gra. Kurcze zabawa będzie z tą fizyką.Tam myślałem,że bez fizyki nic nie da się zrobić. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 12 Maja 2016 Autor Udostępnij Opublikowano 12 Maja 2016 Dzięki Threef za radę.Twoje rozwiązanie jest praktyczniejsze;) znacznie przyspieszyła gra. Kurcze zabawa będzie z tą fizyką.Tam myślałem,że bez fizyki nic nie da się zrobić. Widziałem na marketplace rozwiązanie bez użycia fizyki,ale wykorzystujące emitery.Myślę,że to do końca nie będzie dobre rozwiązanie,bo znacznie mogło byto wpłynąć na działanie mojej gry. Emitery mogą obciążać grę zresztą mam już swoją wodę...brakuje mi właśnie tego efektu obiektów,które znajdują się na wodzie. Obiekty które umieszczę na wodzie,to się na niej utrzymują nie spadają,kwestia tego żeby poruszały się na wodzie.Np kiedy wskoczę do wody i pływam,to wytwarza się fala...ale obiekty na wodzie są sztywne ciężko uzyskać ten efekt ruchu na wodzie. Nie wiem...może dać alarm w obiekcie,który znajdzie się na wodzie,że co np 1 sekundę będzie poruszał się? hmmm..ale to bez sensu może być... Na fizyce,to nie wiem jak to zrobić...jak ją włączę,to musiałbym i zapewne w bohaterze ją też włączyć,co by zepsuło moją całą grę. 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ę