Pomoc przy sterowaniu pojazdem w grze 2d + RealTime obracanie sprite`a

0

Witam, mam problem dotyczący sterowania obiektem w 2d. Piszę moją pierwszą grę i ma to być prosta gra wyścigowa ze sterowaniem jak np w legendarnym gta2. Biblioteka graficzna z jakiej korzystam to SDL. Obecnie mam tak:

wciśnięcie klawisza:

    case SDLK_UP: 
			Vely -= cos(kat)*Vm;
			Velx += sin(kat)*Vm;
			break;
        case SDLK_DOWN: 
			Vely += cos(kat)*Vm;
			Velx -= sin(kat)*Vm;
			break;
        case SDLK_LEFT: kat +=0.1; break;
        case SDLK_RIGHT: kat -=0.1; break;

puszczenie klawisza:

        case SDLK_UP: 
			Velx -= sin(kat)*Vm;
			Vely += cos(kat)*Vm;
			break;
        case SDLK_DOWN: 
			Velx += sin(kat)*Vm;
			Vely -= cos(kat)*Vm;
			break;
        case SDLK_LEFT: kat -=0.1; break;  // to chyba niepotrzebne
        case SDLK_RIGHT: kat +=0.1; break; // -||-

Vm to stała prędkość. Póki co chcę to dobrze zrealizować w taki sposób, a dopiero potem dać przyspieszenie, opóźnienie, tarcie.
No i mam takie problem, że samochód nie jedzie mi tak jak logicznie powinien.

Drugim problemem jest obracanie sprite`a, jak to realizować w SDLu? Wiem że nie ma wbudowanej funkcji, ale jest dodatkowa nakładka na SDLa mająca funkcję rotozoom, tyle że jest to mało wydajne dla dynamicznych (:D) gier. Jak uważacie, jak powinienem to zrealizować? Obrócić obrazki co np 15-30 stopni, przeliczyć te wartości na radiany i potem wklejać je na powierzchnię w zależności od zmiennej "kąt"?

Będę wdzięczny za pomoc

0

widzisz, ja mam natomiast taki problem, że nie chce mi działać odbicie piłeczki od ściany, zamieszczam poniżej kod może coś pomoże:

int foo(int a, int b, int c, int d, int e, int f)
{
     if(a > 0 && b < -2435)
       return 34543;
     else if (b > - 2436 && c <= 324)
       return -4345;
     else if(d > 1 && f < -32 && e == 2)
       return 4325;
    
     return 1;
}

... joke, śmietnik pozdrawiam ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1