cs_Batman60
Messages postés71Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention21 octobre 2007
-
4 sept. 2005 à 11:41
cs_Batman60
Messages postés71Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention21 octobre 2007
-
5 sept. 2005 à 21:32
voici un bout de code qui sert à me déplacer dans une scène 3D opengl ,le problème c'est qu'il faut à chaque fois appuyer sur la touche pour ce déplacer
comment faire pour un déplacement continuel en laissant les touches pressées
je débute avec la lib SDL
GLfloat z=4.0f;
GLfloat x=1.0f;
void handleKeyPress( SDL_keysym *keysym )
{
switch ( keysym->sym )
{
case SDLK_ESCAPE:
Quit( 0 );
break;
case SDLK_w:
z+=4.0f;
break;
case SDLK_x:
z-=4.0f;
break;
case SDLK_LEFT:
x+=1.0f;
break;
case SDLK_RIGHT:
x-=1.0f;
break;
default:
break;
}
return;
}
gluLookAt(x ,0.0,z ,0.0,0.0,0.0,0.0,1.0,0.0);
MERCI
NeoUmbrella
Messages postés117Date d'inscriptionvendredi 5 novembre 2004StatutMembreDernière intervention15 janvier 2013 4 sept. 2005 à 15:06
Pour une gestion du clavier avec SDL je ferais comme ceci :
SDL_Event Event;
while(SDL_PollEvent (&Event))
{
switch(Event.type)
{
case SDL_KEYDOWN:
switch(Event.key.keysym.sym)
{
case SDLK_LEFT:
// Deplacement vers la gauche
break;
}
}
}
Puis pour un meilleur gameplay, lors de l'evenement SDL_KEYUP tu test si une autre touche est enfoncée avec SDL_GetKeyState(), comme ca tu as un déplacement continue.
cs_Batman60
Messages postés71Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention21 octobre 2007 5 sept. 2005 à 21:32
merci les gars entre temps on m'a montré cette solution ci-dessous qui marche impeccable
char intern_key[400];
void UpdateEvents()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
intern_key[event.key.keysym.sym]=1;
break;
case SDL_KEYUP:
intern_key[event.key.keysym.sym]=0;
break;
}
}
}
int Key(int sdlcode)
{
int ret=intern_key[sdlcode];
return ret;
}
puis dans la fonction main:
while(!Key(SDLK_ESCAPE))
{
UpdateEvents();
if(Key(SDLK_LEFT))x+=0.01f;
if(Key(SDLK_RIGHT))x-=0.01f;
if(Key(SDLK_x))z+=0.01f;
if(Key(SDLK_s))z-=0.01f;
drawGLScene( );
initGL( );
}