Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML]Zmierzanie do określonej pozycji

Ostatnio zmodyfikowano 2013-06-22 22:43
Autor Wiadomość
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ą?
P-36629
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.
C/C++
// co 0.1s
X += przesuniecieX;
Y += przesuniecieY;
P-36630
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-23 00:26:58
Z dowolnego w dowolny
P-36631
akwes
» 2011-07-23 00:28:35
C/C++
// sin() i cos() są z math.h (dlaczego 3.14/180? Straciłem na tym CAŁY DZIEŃ! Funkcje sin() i cos() nie przyjmują argumenty w stopniach tylko w radianach :))
float speed = 3; // ilosc pikseli jakie ma sie przebyc
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
P-36633
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
P-36637
akwes
» 2011-07-23 00:56:33
Wiec tak, najpierw liczysz odległość między punktem A i punktem B.

Potem liczysz kąt wektora

I 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
P-36638
diego997
Temat założony przez niniejszego użytkownika
» 2011-07-23 00:59:01
dzięki :D
P-36639
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
P-36640
« 1 » 2
  Strona 1 z 2 Następna strona