Tom's Guide > Forum > Programmation > [SDL] Problème de déplacement
Mot :    Pseudo :           
 

Bonjour,
J'ai essayé de faire un petit code de déplacement de personnage. Aucune erreur est marquée mais impossible de diriger le personnage et la fenêtre ne répond pas (Fin du programme, ne répond pas).
J'ai bien mis tout les fichiers .dll dans mon dossier.

Voici mon code:

Main.c

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL/SDL.h>
  4. #include <SDL/SDL_image.h>
  5. #include "constantes.h"
  6. int main(int argc, char *argv[])
  7. {
  8.  
  9.     SDL_Surface *tarin[4] = {NULL};
  10.     SDL_Surface *tarinActuel = NULL, *ecran = NULL;
  11.     SDL_Rect positionTarin;
  12.     SDL_Event event;
  13.     int continuer = 1;
  14.  
  15.     SDL_Init(SDL_INIT_VIDEO);
  16.     ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  17.     SDL_WM_SetCaption("Test du deplacement", NULL);
  18.  
  19.     tarin[HAUT] = IMG_Load("img/perso/tarin_haut.gif" );
  20.     tarin[BAS] = IMG_Load("img/perso/tarin_bas.gif" );
  21.     tarin[GAUCHE] = IMG_Load("img/perso/tarin_gauche.gif" );
  22.     tarin[DROITE] = IMG_Load("img/perso/tarin_droite.gif" );
  23.  
  24.     tarinActuel = tarin[BAS];
  25.  
  26.     positionTarin.x = ecran->w / 2 - tarinActuel->w / 2;
  27.     positionTarin.y = ecran->h / 2 - tarinActuel->h / 2;
  28.  
  29.     SDL_EnableKeyRepeat(10, 10);
  30.  
  31.     while (continuer)
  32.     {
  33.         switch(event.type)
  34.           {
  35.           case SDL_QUIT:
  36.               continuer = 0;
  37.               break;
  38.           case SDL_KEYDOWN:
  39.         switch(event.key.keysym.sym)
  40.         {
  41.             case SDLK_ESCAPE:
  42.                 continuer = 0;
  43.                 break;
  44.             case SDLK_UP:
  45.                 tarinActuel = tarin[HAUT];
  46.                 positionTarin.y--;
  47.                 break;
  48.             case SDLK_DOWN:
  49.                 tarinActuel = tarin[BAS];
  50.                 positionTarin.y++;
  51.                 break;
  52.             case SDLK_RIGHT:
  53.                 tarinActuel = tarin[DROITE];
  54.                 positionTarin.x++;
  55.                 break;
  56.             case SDLK_LEFT:
  57.                 tarinActuel = tarin[GAUCHE];
  58.                 positionTarin.x--;
  59.                 break;
  60.         }
  61.         break;
  62. }
  63.              
  64.       SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
  65.       SDL_BlitSurface(tarinActuel, NULL, ecran, &positionTarin);
  66.       SDL_Flip(ecran);
  67.     }
  68.    
  69.     SDL_FreeSurface(tarinActuel);
  70.     SDL_Quit();
  71.  
  72.     return EXIT_SUCCESS;
  73. }



Et voici l'autre bout:
constantes.h

Code :
  1. #ifndef DEF_CONSTANTES
  2. #define DEF_CONSTANTES
  3. enum {HAUT, BAS, GAUCHE, DROITE};
  4. #endif




Aucune erreur marquée o_O

Merci à vous pour votre aide ;)


Message édité par J3tDrive le 21-02-2007 à 13:56:00
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Ce n'est pas parce que ça compile que ça fonctionne ;)
Ce n'est pas un problème de DLL, une erreur serait apparue.

Il ne te manquerait pas la gestion des évènements ? (du genre SDL_PollEvent)
Si tu ne récupère pas l'event de la pile d'évènement, la touche passe dans l'oubli, et tu fais une boucle infinie.
Quand tu appuie sur ECHAP, le message de l'évènement est empilé dans ton application, mais comme toi, tu ne vas jamais le chercher, tu ne sauras jamais que ECHAP a été appuyé, d'où l'impression de freeze.

Répondre à CRicky
Tom's Guide > Forum > Programmation > [SDL] Problème de déplacement
Aller à :

Il y a 3017 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens