Pisze sobie taka mala gierkę w allegro 5 i C++
Natknąłem się na pewien problem.
Mianowicie mój ludzik chodzi nie zawsze porusza się w wyznaczonym kierunku.
Mam np. bitmapę z samolotem i ten ludzik powinien poruszać się w kierunku wyznaczanym prze dziób
i nawet porusza się prawidłowo ... póki nim nie skręcisz , gdy skręcisz potrafi się poruszać 'bokiem'.
Przykładowo w kierunku wyznaczonym przez prawe skrzydło.
Nie wiem jak bardziej szczegółowo opisać problem.
Poniżej kod...
class Gracz
{
private:
double tab_sin[72];
double tab_cos[72];
int lx,ly;
float radian;
double dx,dy;
int x ,y; // pozycja samochodu na ekranie
int kierunek ; // aktualny kierunek samochodu
double v; // prędkość naszego samochodu
float predkosc;
void Draw();
void Poruszanie();
ALLEGRO_BITMAP * samolot ;
public:
~Gracz();// dekonstruktor
Gracz();// konstruktor
void Play();
};
Gracz::Gracz()
{
samolot = al_load_bitmap("Graphics\\player.png");
lx = 100;
ly = 100;
x =200,y=200; // pozycja samochodu na ekranie
dx=0,dy=0; // przesunięcie samochodu po osi X i Y
kierunek = 0; // aktualny kierunek samochodu
v=0.0; // prędkość naszego samochodu
for(int i=0; i < 72; i ++)
{
tab_sin[i] = sin((M_PI*(i*5))/180);
tab_cos[i] = cos((M_PI*(i*5))/180);
}
}
Gracz::~Gracz()
{
al_destroy_bitmap (samolot);
}
void Gracz::Draw()
{
al_draw_rotated_bitmap(samolot, al_get_bitmap_width(samolot)/2, al_get_bitmap_height(samolot)/2, x, y, kierunek, 0);
}
void Gracz::Poruszanie()
{
al_get_keyboard_state(&klawiatura); //odczyt stanu klawiatury
if ( al_key_down(&klawiatura, ALLEGRO_KEY_RIGHT )) kierunek -- ;
if ( al_key_down(&klawiatura, ALLEGRO_KEY_LEFT )) kierunek ++ ;
if ( al_key_down(&klawiatura, ALLEGRO_KEY_DOWN )) v-= 0.02;
if ( al_key_down(&klawiatura, ALLEGRO_KEY_UP )) v+= 0.02;
// Sprawdzamy wszystkie ograniczenia:
if( kierunek > 71) kierunek = 0;
if( kierunek < 0) kierunek = 71;
if( v >1.5) v=1.5;
if( v <-1) v=0;
// Obliczanie prędkości cząstkowych:
dx += v*tab_cos[ kierunek];
dy += v*tab_sin[ kierunek];
// Przemieszczanie naszego samochodu:
if( dx >=1 || dx <= -1) { x += int(dx); dx = dx - (dx); }
if( dy >=1 || dy <= -1) { y += int(dy); dy = dy - (dy); }
}
void Gracz::Play()
{
Poruszanie();
Draw();
}