CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++/SDL : keyboard

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 17:37:32

bjour tlm :),
je voudrais pouvoir gérer l´appui de plusieurs touches en même temps, pour déplacer une image en diagonale par exemple.. j´ai essayé ça, mais ça semble pas fonctionner ^^:

***

if(event.key.keysym.sym == SDLK_LEFT && event.key.keysym.sym == SDLK_UP)
{
rectangle_ship.x = rectangle_ship.x - 5;
rectangle_ship.y = rectangle_ship.y - 5;
}
if(event.key.keysym.sym == SDLK_RIGHT && event.key.keysym.sym == SDLK_UP)
{
rectangle_ship.x = rectangle_ship.x + 5;
rectangle_ship.y = rectangle_ship.y - 5;
}
if(event.key.keysym.sym == SDLK_LEFT && event.key.keysym.sym == SDLK_DOWN)
{
rectangle_ship.x = rectangle_ship.x - 5;
rectangle_ship.y = rectangle_ship.y + 5;
}
if(event.key.keysym.sym == SDLK_RIGHT && event.key.keysym.sym == SDLK_UP)
{
rectangle_ship.x = rectangle_ship.x + 5;
rectangle_ship.y = rectangle_ship.y + 5;
}

***

donc si qqun pouvait m´aider, ça serait cool ^^.
merci d´avance :).

blackhawk26
blackhawk26
Niveau 8
02 avril 2004 à 18:02:35

je crois qu´il fo mettre un else avant chaque if sauf le premier.

kokoala
kokoala
Niveau 7
02 avril 2004 à 18:12:14

1 - essaie d´utiliser les switch, on y verra plus clair

2 - utilise d´autres variables à modifier dans tes conditions
par exemple depx et depy
et après toutes tes conditions, tu fais
rectangle_ship.x += depx;
rectangle_ship.y += depy;

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 18:14:36

j´ai déjà fait un switch, mon code actuel est comme ça:

***

SDL_PollEvent(&);
if(event.type == SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE :

return 0;

break;

case SDLK_p :

V = 5;

break;

case SDLK_o :

V = 1;

break;

case SDLK_UP :

rectangle_ship.y = rectangle_ship.y - 5;

break;

case SDLK_DOWN :

rectangle_ship.y = rectangle_ship.y + 5;

break;

case SDLK_RIGHT :

rectangle_ship.x = rectangle_ship.x + 5;

break;

case SDLK_LEFT :

rectangle_ship.x = rectangle_ship.x - 5;

break;
}
}
}

***

mais avec SDL quand on appuie sur 2 touches en même temps et qu´on en relâche une, ça arrette l´action exercée par la 2eme, vous suivez?
sinon je vais voir pour creer moi même la gestion des touches..

kokoala
kokoala
Niveau 7
02 avril 2004 à 18:21:47

je le fais moitié algo pour faire plus vite

if(event.type == SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
cas gauche : depx--;
cas droite : depx++;
cas bas : depy++;
cas haut : depy--;
}
else
if(event.type == SDL_KEYUP)
{
switch(event.key.keysym.sym)
{
cas gauche : si depx<0 depx=0
cas droite : si depx>0 depx=0
cas bas : si depy>0 depy=0
cas haut : si depy<0 depy=0
}
ship.x+=depx;
ship.y+=depy;

/ /et ça fait ce que tu voulais

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 18:24:47

ok j´analyse et je regarde ce que ça donne!
merci !

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 18:49:10

autre question, comment puis-je faire pour récupérer une touche en C ( sans SDL).
j´ai pensé à faire un:

***

char touche;
touche = getchar();
if( touche == nomdelatouche)
{
. ..
}

***

mais je sais pas le " nomdelatouche" ^^
exemple: je veux verifier si l´utilisateur a appuyé sur la touche " fleche gauche", mais le pb c´est que je sais pas le nom de la fleche gauche :/.
pouvez vous m´aider ^^ ?

MathieuN7
MathieuN7
Niveau 10
02 avril 2004 à 19:17:02

euh... la fonction getch() donne le numéro de la touche pressée, donc tu fais des test, ou un ptit prog qui te donnera tous les numéros, sinon y a ça:
toupper(getch()) qui renvoie la majuscule de la touche pressée, je sais pas cke ça renvoie pr la fleche gauche ^^ mais getch() marche bien...
EN revanche je sais pas dans quel header c´est... maybe conio.h
enfin tu peux chercher :-)))

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 19:29:17

ah merci beaucoup, j´vais essayer :D

i_am_the_law
i_am_the_law
Niveau 6
02 avril 2004 à 20:51:19

tu ne devrais pas utiliser getch car il bloque ton programme tant qu´on appuie pas sur une touche.
Test d´abord avec kbhit() par ex

sinon pour plusieurs touches a

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 20:52:23

merci pour cette précision, mais que fait exactement kbhit() ?

fil_razorback
fil_razorback
Niveau 10
02 avril 2004 à 20:53:17

rrrhhhô mais c´est pourtant clair?

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 20:54:04

mhoOOo bah je sais pas^^
a ce que j´ai compris ca recupere une touche appuyée ? mwé bon ok je sors^^
j´vais essayer^^

fil_razorback
fil_razorback
Niveau 10
02 avril 2004 à 20:56:10

:lol: moi chui makerien alors justement; j´en sais rien!

i_am_the_law
i_am_the_law
Niveau 6
02 avril 2004 à 20:56:19

( erf envoye le msh)
donc pr plusieurs touches avec sdl il faut faire comme suit

unsigned char* keys;
int nbkeys;

ensuite dans ta boucle de jeu
keys=SDL_GetKeyState(&);
( ca va mettre 1 dans le tableau sur toutes les touches actuellement pressees).
Ensuite je te conseil de faire un 2eme tableau, genre oldkey.
avant le getkeystate tu copie dans oldkey le contenu de keys.
Comme ca tu peux detecter qu´une touche a ete relachee(keys[k] &&!oldkeys[k])
ou bien tjrs appuyee ( presente dans les 2 tableaux)
ou bien qui vient d etre appuyee(presente ds keys mais pas ds old)

PS: si tu n´appelles pas sdl_pollevent() il faut que tu appelles sdl_pumpevents je crois.
Ca va dependre de l´endroit ou tu auras appele getkeystate.

i_am_the_law
i_am_the_law
Niveau 6
02 avril 2004 à 20:57:14

kbhit ca renvoie 1 si une touche est pressee
donc tu fais
if ( kbhit()) c=getchar()

comme ca ton prog n´est pas bloque.
si aucune touche n´est pressee, ton programme continue

fil_razorback
fil_razorback
Niveau 10
02 avril 2004 à 20:58:19

bon bah moi j´vous crois sur parole....

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 20:58:38

ok ok, direction la doc SDL pour avoir + d´infos sur getkeystate car jsuis pas sur d´avoir tout compris :rire:

fil_razorback
fil_razorback
Niveau 10
02 avril 2004 à 21:00:49

euh...ouais pareil pour moi.
mais t´as pensé a paramétré ton getthiskey avant de défarté la matrice du buffer de la deuxieme touche avant d´actionner key89Bn?

_[CONKER]_
_[CONKER]_
Niveau 10
02 avril 2004 à 21:01:36

:rire2:
haha t´es marrant toi :-p

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment