Se connecter / S'enregistrer
Votre question

C et SDL_EnableKeyRepeat

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
8 Avril 2006 11:38:29

salut :) 
Alors j'ai commencer un programme ;-)
dont en voici la source:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <SDL/SDL.h>
  5. #include <windows.h>
  6. int main (int argc, char *argv[])
  7. {
  8.  
  9. SDL_Event event;
  10.  
  11. int continuer=1;
  12. int mouvement=0;
  13. int repetition=1;
  14.  
  15.  
  16.  
  17.  
  18. SDL_Surface *ecran=NULL,*personnage=NULL,*image_fond=NULL;
  19. SDL_Rect position_personnage,position_image_fond;
  20.  
  21.  
  22. //position initiale du personnage
  23. position_personnage.x=240;
  24. position_personnage.y=0;
  25.  
  26. //position du fond(statique donc 0*0)
  27. position_image_fond.x=0;
  28. position_image_fond.y=0;
  29.  
  30.  
  31. if(SDL_Init(SDL_INIT_VIDEO)<0)
  32. {
  33. fprintf(stderr,"Impossible d'initialiser la SDL:%s\n",SDL_GetError());
  34. return (EXIT_FAILURE);
  35.  
  36. }
  37. ecran=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
  38. if(ecran==NULL)
  39. {
  40. fprintf(stderr,"Impossible de passer en mode 640*480*32:%s\n",SDL_GetError());
  41. return (EXIT_FAILURE);
  42. }
  43.  
  44. image_fond=SDL_LoadBMP("herbe.bmp");
  45. personnage=SDL_LoadBMP("homme_devant.bmp");
  46. SDL_WM_SetCaption("Bouger un personnage",NULL);
  47. SDL_SetColorKey(personnage,SDL_SRCCOLORKEY,SDL_MapRGB(personnage->format,32,156,0));
  48.  
  49.  
  50.  
  51.  
  52. SDL_EnableKeyRepeat(10,10);
  53. while(continuer)
  54. {
  55.  
  56. SDL_WaitEvent(&event);
  57.  
  58. switch(event.type)
  59. {
  60.  
  61. case SDL_QUIT:
  62. continuer=0;
  63. break;
  64.  
  65. case SDL_KEYDOWN:
  66.  
  67.  
  68. switch(event.key.keysym.sym)
  69. {
  70.  
  71. case SDLK_UP:
  72. SDL_EnableKeyRepeat(10, 10);
  73. position_personnage.y=position_personnage.y-5;
  74.  
  75. break;
  76. case SDLK_DOWN:
  77. SDL_EnableKeyRepeat(10, 10);
  78. position_personnage.y=position_personnage.y+5;
  79. break;
  80. case SDLK_LEFT:
  81. SDL_EnableKeyRepeat(10, 10);
  82. position_personnage.x=position_personnage.x-5;
  83. break;
  84. case SDLK_RIGHT:
  85. SDL_EnableKeyRepeat(10, 10);
  86. position_personnage.x=position_personnage.x+5;
  87. break;
  88.  
  89. case SDLK_ESCAPE:
  90. continuer=0;
  91. break;
  92.  
  93.  
  94. break;
  95. }
  96.  
  97. }
  98.  
  99. SDL_BlitSurface(image_fond,NULL,ecran,&position_image_fond);
  100. SDL_BlitSurface(personnage,NULL,ecran,&position_personnage);
  101. SDL_Flip(ecran);
  102. }
  103.  
  104. SDL_FreeSurface(personnage);
  105. SDL_FreeSurface(image_fond);
  106. SDL_Quit();
  107.  
  108. return EXIT_SUCCESS;
  109. }


Donc le programme fonctionne correctement mais le problème et que la repetition des touches (SDL_EnableKeyRepeat) ne marche pas

:-(
Donc si vous pouvez m'aider sa serait cool!
merci ;-)

Autres pages sur : sdl enablekeyrepeat

a b L Programmation
8 Avril 2006 12:36:44

Cette fonction active la répétition lorsqu'on laisse appuyer sur une touche.
C'est une fonction de réglage qui ne s'appelle qu'une fois.

Exemple si tu mets au début du programme:
SDL_EnableKeyRepeat(300, 10);

A chaque fois que laissera appuyé sur une touche par exemple pendant 2 secondes, l'évènement d'appui sera déclenché quand on enfonce la touche, puis 300ms plus tard un autre, puis toutes les 10ms, et ce jusqu'à ce que l'on relâche la touche.
8 Avril 2006 12:51:26

ok merci ;-)
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