Skocz do zawartości

Zablokowane Zawansowana kolizja ze ścianą


Rekomendowane odpowiedzi

Yo!

Czy istnieje w GMie jakaś sprawna komenda, dzięki której mógłbym przy kolizji obiektu ze ścianą przesuwać ten obiekt po krawędzi.

Tzn. gdy używam znanych mi komend postać, albo odskakuje (move_bounce), albo haczy się jak o papier ścierny (np. x=xprevious).

 

Dlatego pytam jak zrobić jakieś płynne spowalnianie gdy idzie się na ścianę w grze TOPDOWN. Jest jakaś sprytna funkcja?

 

Z góry dzięki za pomoc.

 

Jeszcze jedno, jak można sprawdzić czy obiekt koliduje z pathem?

Odnośnik do komentarza
Udostępnij na innych stronach

Wielkie dzięki ;)

Szkoda tylko, że nie ma jakiegoś rozwiązania dla mojego głównego, ważniejszego problemu. Musiałbym jakoś sprawdzać direction... Hmm...

Moja gra jest gość prosta, bo ściany z którymi koliduje gracz są kwadratowe a nie różnego kształtu. Więc jeśli postać nie idzie wprost na ścianę to powinna iść jakoś wolniej. Pomoże ktoś?

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra, dzięki, właśnie tak zrobiłem, że zmniejszam prędkość, ale męczę się jeszcze z collision_line. Co niby jest nie tak w tym kodzie, że nie działa?

GML
if collision_line(randompunkt2.x,randompunkt2.y,randompunkt1.x,randompunkt1.y,self,1,0)

{instance_destroy();}

 

EDIT:

Chciałem zrobić, żeby między randompunktem1 a randompunktem2 kasowały się blocki. :P Jednak nie wiem czy dobrze tej funkcji użyłem.

Odnośnik do komentarza
Udostępnij na innych stronach

A gdzie to wpisałeś?

 

W Create. Ale chyba kolejność zdarzeń jest dobra i to się dzieje jak już są te punkty. Czekajcie sprawdzę...

 

Nom... to się dzieje, kiedy już wszystko jest na mapie. Czyli we właściwej kolejności :P Dałem w Create zamiast tego distance_to_object cośtam to instance_destroy() i takie coś działa. Tylko nie wiem dlaczego z tym collision_line nie :P

Odnośnik do komentarza
Udostępnij na innych stronach

Co do kolizji ze ścianami (zapomniałem odświeżyć stronki :D )

 

Spróbuj ten kod wstawić do obiektu bohatera to zdarzenia kolizji ze ścianą:

 

GML
// zapisanie informacji o kącie zderzenia

var dir;

dir = point_direction(x, y, other.x, other.y);

 

// podział na poszczególne reakcje

if ((dir >= 45 && dir <= 135) || (dir >= 225 && dir <= 315))

y += abs(vspeed)*sin(degtorad(dir));

if ((dir >= 135 && dir <= 225) || (dir >= 315 || dir <= 45))

x -= abs(hspeed)*cos(degtorad(dir));

 

Mam nadzieję, że o to chodzi. Działa na zasadzie odbicia, ale tylko składowej prędkości i tylko o wymaganą wartość. Ale musisz mieć do tego originy w środku ścian i w miarę kwadratowe maski (obrazki do sprawdzania kolizji). Tylko wtedy działa, za to efekt jest taki jak powinien być.

 

Co do kolizji ze ścieżką - niestety nie pomogę, nie znam się na ścieżkach.

Odnośnik do komentarza
Udostępnij na innych stronach

GML
with(all){

if collision_line(randompunkt2.x,randompunkt2.y,randompunkt1.x,randompunkt1.y,self,

1,0)

{instance_destroy();}

}

 

 

Jak to wstawiam to nic się nie dzieje :/ Dawać to z Create czy nie?

 

Edit:

Daje w Step, to zalagowuje grę. ;p

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm... Nic nie działa.

Pomoże mi ktoś jeszcze? Nawet jak nie czytałeś tego tematu.. pomóż mi. Pobierz to i spróbuj coś zrobić.

https://gmclan.org/up5269_12_collisionlineblock.html

 

Nie możliwe, że nie można tego zrobić :D Przecież musi być jakieś rozwiązanie. Specjalnie okrajałem moją grę, żebyście mogli pobrać i sprawdzić. Więc proszę spróbujcie coś wykombinować, bo ja się męczę cały dzień i nic :P

 

 

https://gmclan.org/up5269_12_collisionlineblock.html

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

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