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

C++ poruszanie się postaci w kierunku myszki

Ostatnio zmodyfikowano 2013-12-22 16:11
Autor Wiadomość
minimaxHAWK
Temat założony przez niniejszego użytkownika
C++ poruszanie się postaci w kierunku myszki
» 2013-12-21 17:56:10
Podczas tworzenia własnej gry w allegro 4 (2d, widok z lotu gołębia, porusza się mapa, czyli obrazek w tle, gracz jest cały czas w miejscu) natrafiłem na poważny problem:
Nie jestem w stanie napisać algorytmu odpowiadającego za przemieszczanie się w stronę (aktualnych współrzędnych) myszki.
W kodzie zaimplementowane jest już liczenie kąta względem myszki.

fragment: liczenie kąta
C/C++
player.x = SCREEN_W / 2;
player.y = SCREEN_H / 2;
player.angle = 0;
player.angle = - fixatan2( ftofix( player.x - mouse_x ), ftofix( player.y - mouse_y ) );

fragment: poruszanie się
C/C++
if( key[ KEY_W ] )
{
   
   
    mapa_x -= r2 * sin( fixtof( player.angle ) * M_PI / 180.0 );
    mapa_y += r1 * cos( fixtof( player.angle ) * M_PI / 180.0 );
    myszka();
   
}

r2 i r1 oznaczają prędkość, ma stałą wartość 10
mapa_x i mapa_y oznaczają współrzędne mapy (obrazka bmp)
myszka(); to powtórne policzenie/pobranie współrzędnych

Po kompilacji program działa w miare normalnie, chodzenie przypomina chodzenie strzałkami( if( key[KEY_UP]) mapa_x++; itd.) tylko odwrócone o 45 stopni.
Proszę o pomoc.
P-99752
minimaxHAWK
Temat założony przez niniejszego użytkownika
Ok, mam
» 2013-12-22 16:11:48
Przeglądając allegro.cc natrafiłem na podobny do mojego problem, mój kod zmodyfikowałem, teraz wygląda to tak:
C/C++
if( key[ KEY_W ] ) predkosc++;

if( key[ KEY_S ] ) predkosc--;

double bullet_direction = atan2( mouse_y - player.y, mouse_x - player.x );

mapa_x -= predkosc * cos( bullet_direction );
mapa_y -= predkosc * sin( bullet_direction );
Teraz wszystko działa.
P-99842
« 1 »
  Strona 1 z 1