Aide pour jeu de voiture en c++ avec SDL

Aide pour jeu de voiture en c++ avec SDL - C++ - Programmation

Marsh Posté le 29-08-2007 à 22:07:22    

bonjour voila j'ai un probleme sur mon jeux de voiture je ne sait pas comment la faire aller dans une direction en fontion d'un angle
j'ai demendé sur le forume du site du zero comment il falait faire on ma donné comme reponce :

Citation :

Pour un angle a (exprimé en radian) :
. x,y = coordonnée de ta voiture
. d = distance a avancer
 
x += d*cos(a);
y += d*sin(a);
 
Probleme de trigonométrie :)


 
 
mais voila je ne sait pas comment m'en servir dans le code :
 

Code :
  1. void Car::aff(SDL_Surface *ecran)
  2. {
  3.     angleR = angle/(2*3.1415);
  4.     pos.x += cos(angleR) * vy;
  5.     pos.y += sin(angleR) * vx;
  6.     voiture = rotozoomSurface(car, angle, 1.0, 1);
  7.     posV.x = pos.x - voiture->w/2;
  8.     posV.y = pos.y - voiture->h/2;
  9.     SDL_FillRect(ecran, NULL, 0);
  10.     SDL_BlitSurface(voiture, NULL, ecran, &posV);
  11.     SDL_Flip(ecran);
  12. }
  13. void Car::gereTouche(SDL_Event event)
  14. {
  15.     if(event.type == SDL_KEYDOWN)
  16.     {
  17.         switch(event.key.keysym.sym)
  18.         {
  19.             case SDLK_UP: vy = 10; break;
  20.             case SDLK_DOWN: vy = -10; break;
  21.             case SDLK_LEFT: vx = 10; angle++; break;
  22.             case SDLK_RIGHT: vx = 10; angle--; break;
  23.         }
  24.     }
  25.     if(event.type == SDL_KEYUP)
  26.     {
  27.         switch(event.key.keysym.sym)
  28.         {
  29.             case SDLK_UP: vy = 0; break;
  30.             case SDLK_DOWN: vy = 0; break;
  31.             case SDLK_LEFT: vx = 0; break;
  32.             case SDLK_RIGHT: vx = 0; break;
  33.         }
  34.     }
  35. }


 
cela ne fonctionne pas la voiture par nimporte ou donc si vous avez des reponces merci de me les donner  
 
 
et merci encore

Reply

Marsh Posté le 29-08-2007 à 22:07:22   

Reply

Marsh Posté le 29-08-2007 à 22:31:43    

le probleme c'est que je ne sait pas si ce que j'ai ecris peut fontionner

Reply

Marsh Posté le 29-08-2007 à 23:39:40    

Code :
  1. void Car::aff(SDL_Surface *ecran)
  2.     {
  3.    
  4.        angleR = angle/(2*3.1415);
  5.    
  6.        pos.x += cos(angleR) * vy;
  7.        pos.y += sin(angleR) * vx;
  8.    
  9.        voiture = rotozoomSurface(car, angle, 1.0, 1);
  10.    
  11.        posV.x = pos.x - voiture->w/2;
  12.        posV.y = pos.y - voiture->h/2;
  13.    
  14.        SDL_FillRect(ecran, NULL, 0);
  15.        SDL_BlitSurface(voiture, NULL, ecran, &posV);
  16.        SDL_Flip(ecran);
  17.     }
  18.    
  19.     void Car::gereTouche(SDL_Event event)
  20.     {
  21.        if(event.type == SDL_KEYDOWN)
  22.        {
  23.            switch(event.key.keysym.sym)
  24.            {
  25.                case SDLK_UP: vy = 10; break;
  26.                case SDLK_DOWN: vy = -10; break;
  27.                case SDLK_LEFT: vx = 10; angle++; break;
  28.                case SDLK_RIGHT: vx = 10; angle--; break;
  29.                default:break;
  30.            }
  31.        }
  32.        if(event.type == SDL_KEYUP)
  33.        {
  34.            switch(event.key.keysym.sym)
  35.            {
  36.                case SDLK_UP:
  37.                case SDLK_DOWN:
  38.                case SDLK_LEFT:
  39.                case SDLK_RIGHT: vx = 0; break;
  40.                default:break;
  41.            }
  42.        }
  43.     }
 

Bon modifie un chouille ton deuxieme switch pas besoin de le remettre 4 fois ta remise a 0;

 

Aprés, pour ton histoire de déplacement.
Tu dois perma press up pour avancer ? et left/right pour la faire pivoter ??

 

edit: hum compris, je vai y réflechir un chouille !


Message édité par Coladin le 29-08-2007 à 23:42:29
Reply

Marsh Posté le 29-08-2007 à 23:47:53    

A priori, les fonctions cos et sin prennent des angles en radian
des fois que tu n'y aurait pas pensé...

Reply

Marsh Posté le 30-08-2007 à 00:39:15    

ben en fait il faudrais faire comme dans un jeux de voiture en 2D mais je ne sait pas comment faire (j'aurais juste besoin pour faire tourner la voirure)

Reply

Marsh Posté le 30-08-2007 à 12:50:04    

Salut !
 
Haute moi un doute : quand tu écrit  

Code :
  1. angleR = angle / (2*3.1415)


tu veut dire "angle en radiant égal angle en degré sur 2*PI" ? Si c'est ça, ben c'est un peu faux...  
faut faire ça :

Code :
  1. angleR = angle * 3.1415f / 180.0f


vive les règles de 3 :)

Reply

Marsh Posté le 30-08-2007 à 13:28:02    

Merci bcp sa mache

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed