Skocz do zawartości

O ruchu, grawitacji i strzelaniu


Rekomendowane odpowiedzi

Witam, tym razem mam kilka pytań, dotyczących takich banalnych rzeczy jak grawitacja, chodzenie czy strzelanie.

 

Zacznę od tego co mam (omijając elementy niezwiązane z pytaniem)

 

Mam dwa obiekty, jednym jest gracz (pl), a drugim jest koło symbolizujące planetkę(128px średnicy około)(ea) czy coś w tym stylu.

Planetka ma ustawiony origin na środku. a gracz na środku stóp (czyli 16,32) 

 

 

Gracz ma

GML
grawit=point_direction(x,y,ea.x,ea.y)

//gravity_direction=grawit

image_angle=grawit+90

 

if (distance_to_object(ea)>0&&distance_to_object(ea)<50)

{

//motion_set(grawit,6)

move_contact_solid(grawit,100)

//gravity=0.5

}

else

{

//gravity=0}</span>

 

a podczas naciśnięcia klawisza w lewo/prawo 

 

GML
motion_set(grawit-90,5)

 

 

//analogicznie dla przeciwnego kierunku.</span>

 

A teraz przechodzę do głównej części tematu, czyli innymi słowy "O co mi chodzi".

 

 

1)

Jak zrobić by obiekt, (zakładając, że wykorzystuję opcję z grawitacją, a nie z move_contact_solid) się zatrzymywał jak dotknie planety.?

W przypadku tradycyjnej grawitacji wystarczyło wpisać gravity=0|vspeed=0, tutaj niestety nie wiem jak to zrobić.

 

W przypadku wersji z move_contact_solid, jak zmniejszyć szybkość ruchu?

 

2)

Moja wersja ruchu ( motion_set(grawit-90,5) ) powoduje aktualnie, że postać porusza się w sposób nie do końca prawidłowy, a mianowicie z każdym stepem ruchu oddala się lekko od powierzchni aż gdy odległość wyniesie jakąś wartość spada. Czy jest może jakiś skuteczniejszy sposób ustalenia ruchu?

 

 

Dodatkowo jako, że nie byłem najlepszy z fizyki to wie ktoś może gdzie można poczytać jak obliczyć tor ruchu obiektu w analogicznej sytuacji?

 

I pytanie bonusowe: Dlaczego nie mogę pisać na SB?

 

Pozdrawiam

 

 

PS. Czy istnieje funkcja podająca kąt do obiektu.

Odnośnik do komentarza
Udostępnij na innych stronach

1) może zadziała speed -= liczba i w kolizji z planetą speed = 0

 

 

próbowałem speed = 0, lecz to się nie do końca sprawdza, gdyż gracz ma mieć możliwość chodzenia po planecie, a w ten sposób po każdej próbie wykonania kroku postać się zatrzymywała.

 

speed -= n masz na myśli w czasie zbliżania się to planety? Jeśli tak to niestety odpada gdyż jest zbytnio sprzeczne z fizyką, gdyż powinno działać przyśpieszenie, które dorobię jak będę miał podstawowe poruszanie.

 

 

 

 

PS. Zna ktoś może przyczynę, dla której nie mogę pisać na SB?

Odnośnik do komentarza
Udostępnij na innych stronach

GML
if(distance_to_object(planeta) < 100)&&(distance_to_object(planeta))

{

x += lengthdir_x((100-distance_to_object(planeta))/100,point_direction(x,y,planeta.x,planeta.y)) //przed point_direction jest "/100", jeśli zmniejszysz tę wartość, grawitacja będzie silniejsza i vice versa)

y += lengthdir_y((100-distance_to_object(planeta))/100,point_direction(x,y,planeta.x,planeta.y)) //tak samo

}

Spróbuj.

Odnośnik do komentarza
Udostępnij na innych stronach

Dzięki, całkiem ładnie radzi sobie z przyśpieszeniem teraz, tylko nie mogę zrozumieć dlaczego zdarza się, że zatrzymuje się przed kontaktem z podłożem.

 

 

Jest jakiś sposób na sprawdzenie kąta do obiektu (a właściwie do najbliższego pixela w jego spritecie od obiektu? Najprostsza wersja tego co tym chcę odiągnąć to dwa ruchome obiekty o nieregularnych kształtach połączone odcinkiem o najkrótszej możliwej długości.

Odnośnik do komentarza
Udostępnij na innych stronach

Wiem, że jest distance_to_point i distance_to_object, ale nie o to chodzi. Istnieje funkcja point_direction, ale te dwa punkty muszą być wcześniej zdefiniowane, więc chyba nie da rady zrobić tego, o co poprosiłeś.

Chyba, że znajdzie się jakiś DLL z brakującymi funkcjami.

 

A to, że nie zatrzymuje się przy kontakcie z podłożem, jest spowodowane nieregularnością obiektów. Musisz sobie z tym poradzić np. pisząc dodatkowe linijki kodu sprawiające "przylepianie się" do planety.

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