Skocz do zawartości

obiekt falujący na wodzie i reagujący na gracza jak na nim ustanie


Rekomendowane odpowiedzi

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

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

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

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...