Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SFML
SFML Forum d'entraide sur l'API SFML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 29/09/2011, 14h37   #1
Pifpafboum
Invité de passage
 
Inscription : février 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 6
Points : 2
Points : 2
Par défaut Encore de la gestion d'événements !

Bonjour

J'ai un peu de mal avec la gestion des événements.

Voici un bout de code qui ne sert qu'à illustrer mon propos.

Code :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
 
bool ok_a = false;
bool ok_b = false;
 
    int z = 0;
    int i = 0;
 
    while (App.IsOpened())
    {
 
        sf::Event Event;
        while (i==0)
        {
            App.GetEvent(Event);
 
            if (Event.Type == sf::Event::Closed)
                App.Close();
 
 
            if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
                App.Close();
 
             if ( (Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::A))
             {
                 ok_a = true;
             }
 
             if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::B))
             {
                 ok_b = true;
             }
 
             if ((Event.Type == sf::Event::KeyReleased) || z>100000)
             {
                 break;
             }
 
            z++;
        }
 
        z=0;
 
        if (ok_a == true && ok_b == false)
        {
            cerr <<"a"<<endl;
        }
 
       if (ok_a == false && ok_b == true)
        {
            cerr <<"b"<<endl;
        }
 
       if (ok_a == true && ok_b == true)
        {
            cerr <<"c"<<endl;
        }
       ok_a = false;
 
       ok_b = false;
}

Quand j'appuie sur la lettre A pas de soucis cela fait ce que je demande, pareil pour B

Par contre si je clique sur A et B, j'ai bien le c qui s'affiche mais et c'est là ou le bât blesse, si je reste les touches appuyées, j'obtiendrais un joli petit a.
Et c'est bien cela que je ne comprends pas.
Dans mon esprit soit il doit voir les deux événements (les 2 touches) comme au premier appuie, soit il n'en voit aucun.

Quelqu'un peut-il me dire exactement ce qui se passe dans la récupération d'événement et comment cela est traité.


Bon ben en attendant je fais me faire un p'tit café

merci.
Pifpafboum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 00h17   #2
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 426
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2008
Messages : 10 426
Points : 40 019
Points : 40 019
Bonjour,

Tout d'abord, ce n'est pas lié à SFML. On aurait la même chose en SDL.
Que se passe t-il ?

Lorsque l'on appuie sur une touche, un évènement est envoyé. Ok

Bon, maintenant le cas deux touches:
Citation:
Touche1
Touche2
Ok, les deux sont repérés.
Le cas deux touches, mais avec répétition (reste appuyé)
Citation:
Touche2
Touche1
Touche1
Touche1
Touche1
Touche1
Le système répète la dernière qui a été appuyé (et uniquement celle là). Du coup, dans votre cas, la Touche2 disparait.

Mais comment règle t-on se problème ?

Il faut utilisé des drapeaux, permettant de dire quels sont les touches appuyés. Si une touche est appuyé, on active le drapeau. Si elle est relâché, on désactive le drapeau. Mais si elle n'est pas relâché, même si nous n'avons pas l'évènement, on sait qu'elle est appuyée, grâce aux drapeaux.

Soit:
- Une touche est appuyé, je mets le booléan à true
- Une touche est relâché, je mets le booléan correspondant à false

Si je veux savoir si une touche est appuyé, je regarde mes booléans.
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 00h47   #3
fearyourself
Rédacteur/Modérateur
 
Avatar de fearyourself
 
Homme
Ingénieur Informaticien Senior
Inscription : décembre 2005
Messages : 5 001
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Ingénieur Informaticien Senior
Secteur : Industrie

Informations forums :
Inscription : décembre 2005
Messages : 5 001
Points : 10 736
Points : 10 736
Et en fait on crée un tableau de 256 caractères et on utilise le code ascii comme entrée au tableau.

Jc
fearyourself est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 10h13   #4
Pifpafboum
Invité de passage
 
Inscription : février 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 6
Points : 2
Points : 2
Après quelques cafés
merci pour les réponses, au fait.


Si je dis que mon problème: est que je n'ai pas pris en compte le fonctionnement matériel du clavier et du pc; j'ai tout bon ?



a+
Pifpafboum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2011, 10h18   #5
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 426
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2008
Messages : 10 426
Points : 40 019
Points : 40 019
Citation:
Envoyé par Pifpafboum Voir le message
Si je dis que mon problème: est que je n'ai pas pris en compte le fonctionnement matériel du clavier et du pc; j'ai tout bon ?
Je ne comprends pas ce que vous entendez par "fonctionnement matériel".
(Le problème (du moins, l'effet) que j'ai décrit peut venir soit du système d'exploitation, soit du matériel. Je n'y ai jamais trop réfléchi)
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 20h17   #6
Pifpafboum
Invité de passage
 
Inscription : février 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 6
Points : 2
Points : 2
Hello

Citation:
Le problème (du moins, l'effet) que j'ai décrit peut venir soit du système d'exploitation, soit du matériel. Je n'y ai jamais trop réfléchi)
C'est ce que je voulais dire. Donc je peux mettre résolu et merci pour les réponses
Pifpafboum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h27.


 
 
 
 
Partenaires

Hébergement Web