IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

GetKeystates problème linux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Par défaut GetKeystates problème linux
    tres).
    sur windows j'utilisais la touche 4 ('), 5 ((), 7(è), 8(!)
    mais sur linux, la gestion de ces touches ne fonctionnent pas...
    J'ai vu qu'il fallait utiliser le caractère unicode, mais je ne sais pas comment le mettre en place en utilisant la fonction SDl_Keyssates pour gerer mes touches (je ne veux pas changer ce mode de gestion).

    Auriez vous des idées sur la facon de proceder pour rendre ces touches compatibles ?

    Edit : voilà la partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Uint8 *keystates = SDL_GetKeyState( NULL );
     
            while (continuer)
        {
     
           while(SDL_PollEvent(&event));
            {
            if (keystates[ SDLK_b ]){
                activepiano = 1;
                activeclavier = 0;
            }
            if (keystates[ SDLK_n ]){
                activepiano = 0;
                activeclavier = 1;
            }
            if (keystates[ SDLK_k ]){
                continuer = 0;
            }
            if (keystates[ SDLK_h] && aide){
                aide = 0;
            }
            else if (keystates[ SDLK_h ] && aide == 0){
                aide =1;
            }
     
            if (keystates[ SDLK_e ] && activepiano)
            {
                   positiondo.y = 25;
                   Mix_PlayChannel(0, sondo, 0);
            }
            if (keystates[SDLK_4] && activepiano){
                   positiondiez.y = 25;
                   Mix_PlayChannel(1, sondiez, 0);
                 }
    j'ai essayé de trouver la correspondance (SDLK_QUOTE) avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (keystates[SDLK_4] && activepiano || keystates[SDLK_QUOTE] && activepiano){
                   positiondiez.y = 25;
                   Mix_PlayChannel(1, sondiez, 0);
                 }
    Mais lorsque que je compile (Linux) et que j'execute, des que j'appui sur la touche ', j'ai un Segmentation Fault.
    Savez vous pourquoi ?

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Bonjour,

    Nous n'avons assez de code ici pour te donner une solution exacte. Par contre, a priori, le problème n'a absolument rien à voir avec Linux ni avec la SDL. Pour les touches, ce sont plutôt les scan codes que tu devrais utiliser, si c'est la position qu'elles occupent sur le clavier plutôt que le caractère qu'elles représentent qui t'intéresse.

    Pour la segfault, il semblerait que ce soit un pointeur mal initialisé quelque part qui provoque le plantage, et qui « tombe en marche » sur certaines plate-formes et pas sur d'autres. Le fait que cela ne se produise pas sous Windows, donc, ne signifie pas que ton programme est correct, ni qu'il ne va jamais planter à l'avenir.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Par défaut
    Merci pour ta réponse si rapide, aurais tu un exemple de code avec le scan code ?
    Sinon, pourquoi le SEG FAULT n'apparait uniquement lorsque je met le || ?
    J'ai essayé en ne laissant que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( keystates[SDLK_QUOTE] && activepiano){
                   positiondiez.y = 25;
                   Mix_PlayChannel(1, sondiez, 0);
                 }
    Et j'ai le même problème, je dois avouer que j'ai du mal à comprendre..
    Car avec le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (keystates[SDLK_4] && activepiano ){
                   positiondiez.y = 25;
                   Mix_PlayChannel(1, sondiez, 0);
                 }
    Je n'ai pas cette erreur.
    j'ai oublié de preciser (je pense que vous l'aviez deviné) mais avec le code suivant, les touches du clavier numérique car il faut utiliser KP.

Discussions similaires

  1. [Débutant] GetKeyState Problème Insert
    Par Invité dans le forum C#
    Réponses: 0
    Dernier message: 19/01/2014, 17h24
  2. Problème Linux, Vista et GRUB
    Par zebulon36 dans le forum Administration système
    Réponses: 4
    Dernier message: 20/07/2010, 13h44
  3. Problème Linux / PLoP boot manager / Disque dur USB
    Par zebulon36 dans le forum Administration système
    Réponses: 1
    Dernier message: 26/06/2010, 06h21
  4. problème linux headers
    Par khaliloum dans le forum Administration système
    Réponses: 0
    Dernier message: 22/08/2007, 11h25
  5. [Linux]probléme d'installation
    Par rahmouni ali dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/07/2004, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo