Hideman Opublikowano 6 Marca 2012 Udostępnij Opublikowano 6 Marca 2012 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 :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
hudy0070 Opublikowano 6 Marca 2012 Udostępnij Opublikowano 6 Marca 2012 Nie chodzi przypadkiem o funkcję instance_nearest? Instance_nearest zwraca id najbliższej instancji danego obiektu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Saus Opublikowano 6 Marca 2012 Udostępnij Opublikowano 6 Marca 2012 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sminer Opublikowano 6 Marca 2012 Udostępnij Opublikowano 6 Marca 2012 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 } } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hideman Opublikowano 6 Marca 2012 Autor Udostępnij Opublikowano 6 Marca 2012 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ę ; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sminer Opublikowano 6 Marca 2012 Udostępnij Opublikowano 6 Marca 2012 Miło było pomoc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jakim Opublikowano 7 Marca 2012 Udostępnij Opublikowano 7 Marca 2012 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: 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: gdzie iloczyn acceleration_factor*power(distance_divisor,2) jest pewną stałą. Przykład: https://gmclan.org/up506_14_accel.html 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ę