Forum de la communauté SFML

Aide => Fenêtrage => Discussion démarrée par: arthuro le Juillet 31, 2012, 04:13:45 pm

Titre: [résolu]Problème plusieurs touches
Posté par: arthuro le Juillet 31, 2012, 04:13:45 pm
J'ai un problème qui reste pour moi inexpliqué.
La sfml ne détecte pas lorsque j’appuie sur ces 3 touches en même temps.
Voila mon code:
        void SpeedFire::AcquireEvent()
        {
                Event e; while(screen.GetEvent(e));
                spacePressed=screen.GetInput().IsKeyDown(Key::Space);
                leftPressed=screen.GetInput().IsKeyDown(Key::Left);
                rightPressed=screen.GetInput().IsKeyDown(Key::Right);
                upPressed=screen.GetInput().IsKeyDown(Key::Up);
                downPressed=screen.GetInput().IsKeyDown(Key::Down);
        }

Par contre pour un trio de 3 autres touches, cela marche.

Si j'appuie sur [espace][gauche][haut]   j'obtient seulement [espace]
Si j'appuie sur [espace][gauche] puis [haut] j'obtient seulement [espace][gauche]


Étrange non?


C'est peut-être un problème de mon système (Ubuntu 12.04).
Ou de mon matériel.

Une idée?

Temps qu'on y ait, j'aimerais obtenir plus d'information sur l'utilité de vider les évenements en attente pour utiliser screen.GetInput()
( Je fais cela dans tout mes jeux, car sinon je n'obtient aucun événement à travers un Input)
Titre: Re : Problème plusieurs touches
Posté par: Laurent le Juillet 31, 2012, 04:31:57 pm
Les claviers sont organisés en grille (là on parle vraiment au niveau matériel), du coup c'est simplement une limitation physique : si tu appuies sur plusieurs touches se trouvant sur la même ligne ou colonne, seule une d'entre elles enverra son signal à l'ordinateur.

Tu peux essayer sur d'autres jeux, tu auras strictement le même résultat.

Pour ce qui est du lien entre évènements et input, ça a déjà été modifié dans SFML 2, c'est maintenant complètement découplé.
Titre: Re : Problème plusieurs touches
Posté par: arthuro le Juillet 31, 2012, 11:36:39 pm
Ha oui, je comprend. J'avais le même problème lorsque je programmais en C sur calculatrice.

Je vais donc simplement mettre les 3 touches sur au moins 2 lignes différentes.