diego997 Temat założony przez niniejszego użytkownika |
[SFML]Zmierzanie do określonej pozycji » 2011-07-23 00:23:23 Czy da rade jakoś zrobić aby obiekt znajdujący się np na pozycji (0,0) płynnie przeszedł na pozycję (100,100) z określoną prędkością? |
|
akwes |
» 2011-07-23 00:25:31 Tak! Ale zawsze z 0,0 -> 100,100 czy z dowolnego punktu z dowolny ? Wersja druga wymaga wyprowadzenia wzorów z funkcji trygonometrycznych dowolnego kąta (mam zrobione w programie, to w sumie tylko cos i sin :P ) A tak na szybko, musisz policzyć wektor przesunięcia i dokonywać małej translacji o wektor (przesunięcie) co krótki odcinki czasu. Czyli np. X += przesuniecieX; Y += przesuniecieY;
|
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-23 00:26:58 Z dowolnego w dowolny |
|
akwes |
» 2011-07-23 00:28:35 float speed = 3; float a = float( speed *( - sin(( sprite.GetRotation() * 3.14 ) / 180 ) ) ); float b = float( speed *( - cos(( sprite.GetRotation() * 3.14 ) / 180 ) ) ); sprite.Move( a, b );
To przesuwa sprita w stronę którą jest obrócony, jeżeli chcesz w lewo, prawo czy jakoś tak to sobie sam możesz policzyć czy 90 stopni czy 270. Jeżeli nie znasz kierunku, to trzeba policzyć też, na pewno będą wzory na necie, a wyprowadzenie wymaga tylko przekształceń. Brzmi trudno ale jak widać implementacja bajecznie prosta :P |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-23 00:50:04 Fajnie tylko nie do końca o to mi chodziło, bo to bardziej zaawansowane jest figury się obracają itp :D Ja chce po prostu żeby figura przesuwała się nie zmieniając nachylenia. Bo mam zrobione tak że każdy obiekt zna swoje dwie pozycje najpierw zmierza do (150,400) a potem do (20,20) i każdy o 20 dalej od poprzedniego |
|
akwes |
» 2011-07-23 00:56:33 Wiec tak, najpierw liczysz odległość między punktem A i punktem B. Potem liczysz kąt wektoraI teraz wiesz ile masz przejść, i w jakim kierunku. W powyższych wzorach podstawiasz zamiast sprite.GetRotation(), to co Ci wyjdzie z kąta wektora, a prędkość sobie dobierasz. I dopóki nie dotrzesz do punktu B, to cały czas przesuwasz o ten "mniejszy" wektor z prędkością, którą wybrałeś. W zależności od prędkości i czasu między kolejnymi translacjami (przesunięciami) będzie efekt płynności. Bo płynniej jest przesunąć z prędkością 10 co 0.1 sekundy, niż 20 co 0.2 sekundy, oczywiście trzeba wiedzieć że płynniej = więcej obliczeń, ale przy takich rzeczach to małe obciążenie, chyba że robisz symulację tysiąca cząstek :P |
|
diego997 Temat założony przez niniejszego użytkownika |
» 2011-07-23 00:59:01 dzięki :D |
|
akwes |
» 2011-07-23 00:59:59 Patrz, a mi nauczycielka dała 2 na koniec semestru z matematyki, a ja w wakacje nawet jej używam... Dobra xD koniec mojego żalącego się offtopa |
|
« 1 » 2 |