begin process at 2012 05 29 18:51:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Divers

 > 

pb Rotation


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pb Rotation

vendredi 22 février 2008 à 15:09:38 | pb Rotation

jeremy0189

Bjr tout le monde,je doit rendre ma pPTI pour mercredi prochain mais je suis un debutant en sdl et j'ai donc un probleme, voici mn code que le main.cpp(ci-dessous), je voudrais faire deplacer ma voiture avec rotation grace aux fleches du clavier mais je n'y arrive pas, le code ou sa bloke est en rouge je c il doit manquer 5 à 10 ligne mais impossible à trouver j'ai tout essayer mais la voiture fait n'importe quoi ...Quelqu'un pourrait t-il maider en me donnant le code necessaire ? Je vous en remercie d'avance.. 



#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_rotozoom.h>
#include "Implementation.h"

#define TEMPS      15 // Le temps qu'il y a entre chaque augmentation de l'angle.

int main(int argc, char *argv[])
{
  SDL_Surface *ecran = NULL;

  SDL_Surface *rotation = NULL;
  SDL_Surface *message = NULL;
  SDL_Surface *background = NULL;
  SDL_Surface *tabvoit[3];
  SDL_Event event;
  SDL_Surface *perso = NULL;
  SDL_Rect positfond;
  SDL_Rect voitfond;
  SDL_Rect persofond;
  SDL_GetTicks();

// Position des images
positfond.x=0;positfond.y=0;
voitfond.x=310;voitfond.y=210;
persofond.x=220;persofond.y=251;

  const int SCREEN_WIDTH = 640;
  const int SCREEN_HEIGHT = 480;
  const int SCREEN_BPP = 32;

  int continuer = 1;


  int pointx;
  int pointy;
  double dpointx, dpointy;

  double angle = 0;
  double zoom = 1;
  int sens = 1;

  //Initialisation de la librairie SDL en mode vidéo uniquement et son
  SDL_Init (SDL_INIT_VIDEO);

  // Je définie une fenêtre de 640*480 en 32 bits
  ecran = SDL_SetVideoMode(792, 582, 32, SDL_SWSURFACE| SDL_DOUBLEBUF);
  // Je nomme ma fenêtre
  SDL_WM_SetCaption("Mini-Circuit", NULL);

 //Chargement de l'image
 background = SDL_LoadBMP("Circuit.bmp");

 perso = SDL_LoadBMP("perso2.bmp");

 //Tableau Voiture
 tabvoit[0]=SDL_LoadBMP("car1.bmp");
 tabvoit[2]=SDL_LoadBMP("car2.bmp");
 tabvoit[1]=SDL_LoadBMP("car3.bmp");

  while (continuer) /* TANT QUE la variable ne vaut pas 0 */
   {
        SDL_PollEvent(&event);
        switch(event.type) /* On teste le type d'évÃ?nement */
        {
            case SDL_QUIT: /* Si c'est un évÃ?nement QUITTER */
                 continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
                 break;
          case SDL_KEYDOWN:
             switch (event.key.keysym.sym)
               {
                 case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
                     continuer = 0;
                     break;

       /*         // touche pour deplacer la voiture
             case SDLK_UP:
                       double angle=angle*(3.1415/180.0);
        dpointx+=10*cos(angle);
        dpointy+=10*sin(angle);

               //permet la conversion d'un double en int
                       pointx=(int)dpointx;
        pointy=(int)dpointy;
           voitfond.x=pointx;
        voitfond.y=pointy;
       break;
        */

                 }
             }

 animperso(persofond);

//ContourImage ( voitfond);
  if(voitfond.y>=535)
     {
   voitfond.y=532;
  }
     if(voitfond.x>=754)
     {
   voitfond.x=752;
  }

 //Mur invisible  en dessous personnages
  if ((voitfond.y>=230)&&(voitfond.y<=270))

     if ((voitfond.x>=200)&&(voitfond.x<=250))
    {
     voitfond.y=290;
    }


     // Efface l'écran avec la couleur noire
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));

  // circuit devant l'ecran noir
        SDL_BlitSurface(background,NULL,ecran,&positfond);

  //Afficher Personnage et enleve les couleur contour
  SDL_BlitSurface(perso,NULL,ecran,&persofond);
  SDL_SetColorKey(perso,SDL_SRCCOLORKEY,SDL_MapRGB(perso->format,94,66,41));


  //On affiche la rotation de la surface image.
  SDL_SetColorKey(tabvoit[0],SDL_SRCCOLORKEY,SDL_MapRGB(tabvoit[0]->format,94,66,41));
     rotation = rotozoomSurface(tabvoit[0], angle, 1.0, 1);
     SDL_SetColorKey(rotation,SDL_SRCCOLORKEY,SDL_MapRGB(rotation->format,0,0,0));
        SDL_BlitSurface(rotation , NULL, ecran, &voitfond);

     //On efface rotation car on va la redéfinir dans la prochaine boucle.Si on ne le fait pas, cela crée une fuite de mémoire.
     SDL_FreeSurface(rotation);

  // Met l'écran en premier plan
        SDL_Flip(ecran);
    }

    SDL_FreeSurface(ecran);


  // Libération de la librairie SDL
  SDL_Quit();
  return EXIT_SUCCESS;
}


 

vendredi 22 février 2008 à 17:13:12 | Re : pb Rotation

SnOOpss

Deja il a des trucs bizarres et inutiles, pourquoi tu definis 2 variable qui ont pour nom "angle" ? Y'a forcement un moment ou l'une "prend le dessus" sur l'autre.
Essaye plutot
        double angle2=angle*(3.1415/180.0);
        dpointx+=10*cos(angle2);
        dpointy+=10*sin(angle2);

Si
dpointx et dpointy sont les coordonnées de ton perso a quoi servent pointx et pointy surtout que d'apres ce que je voit seul voitfond.x et voitfond.y servent.
vendredi 22 février 2008 à 17:54:26 | Re : pb Rotation

jeremy0189

Merci pour ton aide, voila donc se que j'ai fais mais sa ne marche toujours pas. la direction se fait bien en bas, a gauche, a droite mais pas en haut et aucune rotation n'est effectué dans n'importe quel sens la voiture reste droite... Est ce que la partie en jaune  est encore utile ? Et que dois-je donc faire pour que cela fonctionne..... Merci pour tn aide...



  // touche pour deplacer la voiture
                case SDLK_UP:
                       double angle2=angle*(3.1415/180.0);
                       dpointx+=10*cos(angle2);
                       dpointy+=10*sin(angle2);
                        break;

                case SDLK_DOWN:
                       voitfond.y = voitfond.y+14;
                         break;
               case SDLK_LEFT:
                        voitfond.x= voitfond.x-14;
                         break;
                case SDLK_RIGHT:
                         voitfond.x = voitfond.x+14;
                         break;

//permet la conversion d'un double en int
       /*             pointx=(int)dpointx;
                       pointy=(int)dpointy;
                       voitfond.x=pointx;
                       voitfond.y=pointy;
                       break;
      */

samedi 23 février 2008 à 16:19:24 | Re : pb Rotation

SnOOpss

Ben en fait je comprend pas trop ton programme  SDLK_LEFT, SDLK_RIGHT ne servent pas a faire tourner ton vehicule justement ? Tu ne veut pas faire tourner ton vehicule avec droite et gauche ? et avancer avec SDLK_UP ?
Pourquoi fait tu bouger le fond quand la personne appuis sur droite et gauche ?

Sinon voitfond.y = (int)dpointy; dponitc doit rester en double car les valeurs sont a virgule.
dimanche 24 février 2008 à 13:08:53 | Re : pb Rotation

jeremy0189

Bin normalement SDLK_LEFT et RIGHT servent à tourner  et UP a avancer.. Mais sinon je fait pas tourner le fond "voitfond" c l'image de la voiture au dessus du fond est je voudrais donc la faire tourner avc rotation "fonction rotozoom" par rapport a un angle " la  trigonometrie" je pence que sa s'appelle comme sa mais je n'y arrive pas moi j'ai mis la formule dans SDLK_UP mais elle ne s'applique pas et je sais pas si cela est bon..
dimanche 24 février 2008 à 13:27:32 | Re : pb Rotation

jeremy0189

Sinn regarde il y a un exemple sur ce lien :
[ Lien ]
La c'est sur Flash Mx mais Je voudrais pouvoir faire le meme deplacement avc ma voiture sur mon programme seulement cela et sa serait genial ! ! lol
Merci pour tes coups de mains...
lundi 25 février 2008 à 17:11:25 | Re : pb Rotation

SnOOpss

C'est normal quelle reste fixe, a quel endroit dans ton prog tu fais varier l'angle de ta voiture ?
Quand on appuis sur avancer, on ne modifit pas l'angle mais on augmente la valeur x et y en fonction de l'angle.
Quand on appuuis sur droite ou gauche ON NE DEPLACE PAS LE VEHICULE (on ne touche pas a x ou y, il suffit de regarder un jeu qui marche avec ce systeme pour s'en apercevoir) mais on incremente ou decremente l'angle.

Apres tu n'as pas besoin de grosses connaissance en math pour faire juste tourner ton vehicule, regarde juste la definition de sinus et cosinus sur un cours de math c'est mieux expliqué que sur ton lien, (et d'ailleur pourquoi travailler en degré alors que tu convertis en radian, travaille directement avec des radians degré 0> 360 radian 0 > 2*Pi avec ca tu pourras meme virer la ligne
Double angle2=angle*(3.1415/180.0);

Tu as juste a comprendre pourquoi y = sin(angle) et x = cos(angle)


Cette discussion est classée dans : int, ecran, rotation, sdl, voitfond


Répondre à ce message

Sujets en rapport avec ce message

Arguments et pointeur. [ par moumouteb ] Bonjours. Voici le bout de code qui pose problème:int Jeu (*ecran) {     ecran = SDL_SetVideoMode(Fenetre.x, Fenetre.y, 32, SDL_HWSURFACE | SDL_DOUBLE Probleme en prog SDL.h [ par sieuzac ] Salut a tous.Je voudrez savoir pourquoi mon va plus vite au TEMP 2 qu'au TEMP 1#include #include #include #include /* surface qui sert à l'affich Problème pour calculer le H pour l'A star ( * ) [ par jedinos ] Bonjour à tous ! [url=http://www.siteduzero.com/tutoriel-3-34333-le-pathfinding-avec-a.html]Dans ce tuto du pathfinding A star[/url] , l'auteur ne no [SDL]probléme avec l'affichage [ par Sega24 ] bonjour à tous, je suis débutant en programmation et je viens de faire un code SDL en vu d'un projet mais je n'arrive pas a avoir les images malgré qu Probleme morpion en SDL c++ [ par juju116 ] Salut tout le monde! j'expose donc mon souci pour l'instant mon programme affiche une image en fond d'ecran et bizarement cette image est bien chargé Problème avec la gestion d'évenement en SDL (à mon avis) [ par OA88 ] salut, je suis lancé dans la programmation du jeu motus en C en utilisaant SDL comme biblio graphique je trouve probléme dans la gestion du touche SDL probleme jeu du labyrinthe (SDL) [ par abggba ] Slt tout le monde, bon voila j'ai un probleme avec mon programme qui seg fault! et en plus il n'affiche que les murs alors qu'ne fait je voudrais qu'i Problème pour afficher des images PNG en SDL [ par jedinos ] Bonjour à tous ! Voilà, en suivant attentivement le cour de programmation en C du site du zéro, j'ai pu il y a quelques jours ( enfin ) commencer la project en sdl sous c windows [ par jilou2008 ] bonjour j ai un probleme j ai creer un project une sorte de jeux de ping pong mais mon probleme est que la balle ne rebondit pas ou va direct en fin d pb en C -> SDL et pointeur [ par snake57 ] Bonjour, j'ai un petit problème avec un prog que je suis entrain de faire. C'est la première fois que j'utilse la SDL et les pointeurs donc je galère


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,560 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales