Votre question

[SDL] Problème de déplacement

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
21 Février 2007 13:55:24

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


Et voici l'autre bout:
constantes.h

  1. #ifndef DEF_CONSTANTES
  2. #define DEF_CONSTANTES
  3.  
  4.  
  5. enum {HAUT, BAS, GAUCHE, DROITE};
  6.  
  7.  
  8.  
  9. #endif



Aucune erreur marquée o_O

Merci à vous pour votre aide ;) 

Autres pages sur : sdl probleme deplacement

a b L Programmation
21 Février 2007 20:44:48

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.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS