LolikZabójca Opublikowano 17 Grudnia 2021 Udostępnij Opublikowano 17 Grudnia 2021 Potrzebuję napisać wydawało by się prostą funkcję, ale nie mogę z jakiegoś powodu napisać jej dobrze. W dodatku nie mam pojęcia pod jakim hasłem to Google'ować. Potrzebuję wykonać funkcję która na podstawie danych: a) obrót aktualny w stopniach b) obrót docelowy w stopniach c) siła obrotu w stopniach Obliczy jak obrócić się w stronę danego obiektu o daną ilość stopni. Ma to spowodować efekt nienadążania za szybko ruszającymi się celami. Taką funkcję myślę, że stosuję się też np przy pisaniu obrotu "ociężałej" lufy czołgu. Ja chcę go użyć do czego innego, ale funkcja będzie ta sama(tak mi się przynajmniej wydaję. Chodzi o to, że jeśli siła obrotu wynosi 5, to skrypt ma właściwie obliczyć kąt docelowy. Czyli kąt A(kąt aktualny) dodać siłę np. 5 stopni(niebieski kolor strzałka i napis) daje kąt b(obrót docelowy). Czyli jakby obrócił o 5 stopni, ale czy w stronę wskazówek zegara, czy w przeciwną to właściwe to co ma obliczyć mi ten skrypt. Będę mega wdzięczny za pomoc. PS.: wiem, że rysunki są przecudne ❤️ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
SimianVirus7 Opublikowano 17 Grudnia 2021 Udostępnij Opublikowano 17 Grudnia 2021 Patrzyłeś lerp()? Czyli coś w stylu aktualne = lerp(aktualne, docelowe, 0.5) //0.5 - siła z jaką ma obracać Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
LolikZabójca Opublikowano 17 Grudnia 2021 Autor Udostępnij Opublikowano 17 Grudnia 2021 34 minuty temu, SimianVirus7 napisał: Patrzyłeś lerp()? Czyli coś w stylu aktualne = lerp(aktualne, docelowe, 0.5) //0.5 - siła z jaką ma obracać Mogę wysłać Ci na priv projekt(dosłownie kilkanaście linijek kodu)? Nie rozumiem jak korzystać z tego w praktyce Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Korodzik Opublikowano 18 Grudnia 2021 Filar Społeczności Udostępnij Opublikowano 18 Grudnia 2021 Nie jestem pewien, czy dobrze rozumiem... Zakładam, że chodzi o coś takiego: sprawdź, jaki obrót (w lewo czy w prawo) najszybciej dotrze do kąta docelowego, i obróć się w tym kierunku? Odpowiedni kod wyglądałaby mniej więcej następująco (w GML'u nic nie robiłem od dawna, więc nie gwarantuję, że zadziała:) current_angle = kąt obecny target_angle = kąt docelowy turn_speed = siła obrotu if (current_angle != target_angle) { turn_dir = sign(sin(pi*(target_angle-current_angle)/180)); if (turn_dir == 0) turn_dir == 1; // Avoid the rotation stopping if current and target angle are at exactly opposite sides current_angle += turn_dir * turn_speed; } Aha, kąty na twoim obrazku są chyba niepoprawne (w GM:S 0 stopni = prawo, 90 stopni = góra) - taki szczegół. EDIT: Kod nieco dłuższy, ale pewnie bardziej wydajny (bo unikamy obliczania sin): if (current_angle != target_angle) { angle_diff = target_angle - current_angle; if (angle_diff > 180) angle_diff = angle_diff - 360; if (angle_diff < -180) angle_diff = angle_diff + 360; turn_dir = sign(angle_diff); if (turn_dir == 0) turn_dir == 1; // Avoid the rotation stopping if current and target angle are at exactly opposite sides current_angle += turn_dir * turn_speed; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Grudnia 2021 Administratorzy Udostępnij Opublikowano 18 Grudnia 2021 Przypominam o funkcji angle_difference LolikZabójca 1 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Korodzik Opublikowano 18 Grudnia 2021 Filar Społeczności Udostępnij Opublikowano 18 Grudnia 2021 Tak jakoś miałem przeczucie, że na pewno w GM:S jest jakaś super wymyślna funkcja, która czyni moją odpowiedź niepotrzebną 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ę