Skocz do zawartości
Hideman

Obiekt posiadający swoje pole grawitacyjne

Rekomendowane odpowiedzi

Witam, z uwagi na hobby GM robię sobie co jakiś czas jakąś gierkę, ale mam problem z obiektem dającym osobno ujemne pole grawitacyjne:

 

Mam podstawową postać, i chcę by zbliżając się do jakiegoś obiektu zostawała by odpychana.

Próbowałem robić z distance_to_object, ale jedynie postać po osiągnięciu odległości wyznaczonej stawała w miejscu, i nic się nie dało zrobić...

 

I moje pytania rodzące się to:

1) Czy da się zrobić to z funkcją instance_nearstep

2) Jak ta funkcja w ogóle działa ? :o

 

PS. Wiem, troszkę bez ładu, ale inaczej tego napisać nie potrafiłem :/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie chodzi przypadkiem o funkcję instance_nearest? Instance_nearest zwraca id najbliższej instancji danego obiektu.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ustawiaj obiektom w jakimś zasięgu direction przeciwne niż point_direction do tego obiektu, i jakieś friction żeby sobie pojeździły, zamiast nienaturalnie się zatrzymywać po chwili.

No i speed tym większy im bliżej się znalazł obiekt.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GML
if distance_to_object(costam) < 100

{

move_towards_point(ludzik.x,Ludzik.y,-5)

}

 

Chodzi o cos takiego ?

Z tym zatrzymywaniem sie to jeszcze pomysle co zrobic.

 

Mozesz zrobic cos takiego:

 

GML
if distance_to_object(costam) < 100

{

move_towards_point(ludzik.x,Ludzik.y,-5)

 

if Ludzik.x > costam.x

{

if speed = 0

{

x+= 10

}

}

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dzięki Sminer, o to mi chodziło !

 

Działa, tak jak chciałem :D

A co do zatrzymywania, to już sam przeanalizuję kod, i zrobię ;

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Powyższy kod opiera się na warunku i z tego względu nie daje efektu płynnego przyciągania (odpychania) obiektów. Można to zrobić na bazie wiedzy z fizyki. Wektorowo:

 

giflatexl.gif

 

gdzie sumarycznie wszystko poza odległością r (promień wodzący) od obiektu jest włączone do stałej.

 

Model opiera się na poniższym kodzie stworzonym bezpośrednio na podstawie powyższego wzoru. Dodajmy do kodu głównego pewne stałe.

 

Create:

GML
acceleration_direction=0

acceleration_value=0

acceleration_factor=-0.02

distance_divisor=100

distance_shift=20

 

Dodawanie wektorowe umieszczamy oczywiście w Step:

 

GML
acceleration_direction=point_direction(x,y,attractor.x,attractor.y)

acceleration_value=1/power((distance_shift+point_distance(x,y,attractor.x,attractor.y))/distance_divisor,2)

motion_add(acceleration_direction,acceleration_value*acceleration_factor)

 

gdzie attractor to obiekt generujący pewne pole grawitacyjne (bardziej by pasowało słowo elektryczne z racji odpychania ;)). Bawiąc się parametrami, możemy otrzymać różne modele odpychania (silne/gładkie/prawie jednorodne). Ujemny acceleration_factor oznacza odpychanie się obiektów. Parametr distance_shift pozwala uniknąć dzielenia przez 0 przy teoretycznie zerowej odległości, jest to stała wartość dodawana do promienia. Na nasze warunki wzór będzie wyglądał następująco:

 

giflatexr.gif

 

gdzie iloczyn acceleration_factor*power(distance_divisor,2) jest pewną stałą.

 

Przykład: https://gmclan.org/up506_14_accel.html

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×