Sutikku Opublikowano 2 Lutego 2019 Udostępnij Opublikowano 2 Lutego 2019 Nazwa tematu nic nie mówi, ale chodzi mi o osiągnięcie efektu podobnego do grawitacji (w skali kosmosu). Gdzie wszystkie obiekty na siebie oddziaływają, zależnie od odległości i masy obiektu (czy tam jakiejś zmiennej). Wpadłem na pomysł żeby zrobić maski tak duże by wszystkie obiekty miały kolizje ze sobą (pewnie będą problemy optymalizacyjne no ale) ale nie wiem jak uwzględnić jeszcze te dodatkowe zmienne (tj. odległość i masa). Ktoś mądrzejszy ma jakiś pomysł? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 2 Lutego 2019 Udostępnij Opublikowano 2 Lutego 2019 Ale po co jakieś maski. Lepiej będzie sobie ustalić jakiś maxymalny zasięg działania obiektów i każdy z nich by sobie z pozostałymi sprawdzał jaką ma odległość. A potem podstawić to pod wzór na grawitację: sila_przyciagania = (masa1*masa2)/(dist*dist)*jakasStalaDoregulacjiSily Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 2 Lutego 2019 Autor Udostępnij Opublikowano 2 Lutego 2019 Fakt z tymi maskami, dawno nic nie gierkowałem i nie myślę jak gamedev xx Tylko jak te siłę przyciągania przełożyć na kierunek ruchu, czy w ogóle sam ruch? Mamy np 3. obiekty, dla porównania Ziemia, Księżyc i lecąca pomiędzy nimi asteroida. Dla Ziemi i księżyca lecąca asteroida nie będzie miała wielkiego znaczenia, ale Asteroida powinna zakręcać w stronę ziemi aleee z pewną poprawką w stronę księżyca. Jak to zaaplikować? Można przyjąć, że na początku żaden z obiektów się nie porusza, i są ustawione w linii Ziemia - Asteroida - Księżyc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 2 Lutego 2019 Udostępnij Opublikowano 2 Lutego 2019 No asteroida będzie miała 2 takie siły obie są skierowane w stronę tych obiektów tylko o różnej sile wynikającej z dystansu i masy. Po prostu raz przesuwasz w stronę ziemi o sile takiej jaka dla niej wyszła i potem przesuwasz drugi raz w stronę księżyca ponownie o sile takiej jaka dla niego wyszła. Edit: tutaj jest source mojej gierki która ma takie przyciąganie bo to jej główny element gry. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 2 Lutego 2019 Udostępnij Opublikowano 2 Lutego 2019 Polecam odświeżyć sobie podstawy z fizyki newtona Przypisz każdemu obiektowi co ma masę wektor prędkości liniowej (np. stwórz wektor linear_velocity). Posługuj się przyśpieszeniem grawitacyjnym i dodawaj do tej zmiennej (wektora) wartość przyśpieszenia co step pomnożoną przez delta_time. Wzór ogólny dla przyśpieszenia grawitacyjnego: - warto chociaż przejrzeć https://pl.wikipedia.org/wiki/Przyspieszenie_grawitacyjne Żeby obliczyć dla każdego obiektu przyciąganie, możesz posłużyć się opcją z with, np. var gc = 0.0000000000667408 // 6.67408E-11, stała grawitacyjna with (obj_asteroid) { if (other.id == id) { continue; } // zakladamy rowniez, ze (x,y) to srodek masy obiektu var r = point_distance(x, y, other.x, other.y) var r2inv = 1.0 / (r * r); var accel = gc * mass * r2inv * delta_time other.linear_velocity_x += accel; other.linear_velocity_y += accel; } Potem tylko już aplikujemy ruch: x += linear_velocity_x * delta_time; y += linear_velocity_y * delta_time; 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ę