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

[C++] Obracanie myszką

Ostatnio zmodyfikowano 2011-10-11 17:51
Autor Wiadomość
SeaMonster131
Temat założony przez niniejszego użytkownika
[C++] Obracanie myszką
» 2011-10-10 18:56:45
Nie ma co, poddaje sie :p Szukam, kombinuje i nic ;/ Otóż, chciałbym po prostu obracać myszką postać, i naciskając W chciałbym aby postać szła w tamtą stronę :) Hm.. na moje oko, nie wiem jak wyliczyć kąt obrócenia :) Na razie mam coś takiego:
C/C++
float v = 0, kat = 0;
int x = 300, y = 300;

//...

if( al_key_down( & klaw, ALLEGRO_KEY_W ) )
     v += 0.1;

if( al_key_down( & klaw, ALLEGRO_KEY_S ) )
     v -= 0.1;


kat = x - atan2( mysz.x, mysz.y ); //hmm...

x += v * cos(( kat * ALLEGRO_PI ) / 180 );
y += v * sin(( kat * ALLEGRO_PI ) / 180 );

al_draw_rotated_bitmap( lud, 46 / 2, 48 / 2, x, y, kat, 0 ); //obracam postac przez kat "kat"...

Funkcji trygonometrycznych nie znam :) Wyczytałem, że to oblicza kąt alfa z przy- i przeciwprostokątnych w trójkącie, tylko nie wiem jak mam to wykorzystać. Po prostu wyczytałem z Google, warsztatu i z tego forum różne rzeczy i "coś" wykombinowałem :) Niestety te "coś" mi nie działa ;p Z góry naprawdę dzięki :)
P-41909
DejaVu
» 2011-10-10 19:03:45
Taki sam problem był już rozwiązany na forum...
P-41910
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-10-10 19:07:53
No właśnie wiem! Ale przeszukałem 20 str i nic, szukałem w wyszukiwarce i nic :p dlatego sie poddaje :)
Nawet pamietam jak ktoś dał gotowy kod, ale nie znalazłem nic ;/
P-41911
DejaVu
» 2011-10-10 19:13:44
P-41912
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-10-11 15:54:44
Dobra, obejrzałem te str co Pan podał oraz pare innych. I Udało mi się napisac coś takiego:
C/C++
kat = - al_fixatan2( al_ftofix( y - mysz.y ), al_ftofix( x - mysz.x ) );
/*
to daje to samo:
kat = -al_fixatan2(y-mysz.y, x-mysz.x); 
*/

al_draw_rotated_bitmap( lud, 46 / 2, 48 / 2, x, y, kat / 360, 0 );
Można powiedzieć, że jest prawie dobrze, właśnie..prawie. Niby ładnie się obraca, ale za szybko. Więc próbowałem różne rzeczy dzielić przez różne liczby, ale bez skutku :(
Wiem tylko tyle, że kąt 0 stopni jest gdy postać jest w lewo, wtedy jest ok. Ale gdy już ruszam myszką np do góry, to postać obraca się za szybko...
Ja jeszcze bede tutaj dalej kombinował i szukał, ale każda pomoc się przyda :)
P-41946
OSA_PL
» 2011-10-11 17:23:06
Weź sobie jakąś zmienną, w której będziesz przechowywał kąt obrócenia bitmapy i dopóki wartość zmiennej nie równa się oczekiwanemu kątowi zmniejszaj ją lub zwiększaj wedle potrzeby.   
P-41947
SeaMonster131
Temat założony przez niniejszego użytkownika
» 2011-10-11 17:51:19
Fiu fiu, trochę się namęczyłem ALE SIĘ UDAŁO :)
Dzięki każdemu kto się wypowiedział :)
Rozwiązanie:
C/C++
kat = atan2( y - mysz.y, x - mysz.x );

x += - v * cos( kat );
y += - v * sin( kat );

al_draw_rotated_bitmap( lud, 46 / 2, 48 / 2, x, y, kat, 0 );
Nie wiem jak do tego doszedłem, ale udało się! :)
P-41948
« 1 »
  Strona 1 z 1