Bonjour à tous,

je réalise en ce moment un jeu avec Silverlight en C# et j'ai bien évidemment besoin d'un contrôle via le clavier.

J'utilise pour cela un KeyHandler et deux events : KeyUp et KeyDown.

Je m'étonne de voir que lorsque j'appuie sur la barre d'espacement ou la touche entrée, ces dernières déclenchent l'évènement KeyUp mais jamais KeyDown. Par contre, toutes les autres touches déclenchent KeyDown (lorsqu'elle sont pressées et relâchées).

Existe-t-il une raison particulière liée à ces deux touches ou bien est-ce un problème lié au code? (Les deux peut-être?)

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
        private bool leftButton, rightButton, thrustButton, validButton;
 
 
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            this.KeyDown += new KeyEventHandler(Page_KeyDown);
            this.KeyUp += new KeyEventHandler(Page_KeyUp);
        }
 
 
        void Page_KeyDown(object sender, KeyEventArgs e)
        {
            keyHandler(e.Key, true);
        }
 
        void Page_KeyUp(object sender, KeyEventArgs e)
        {
            keyHandler(e.Key, false);
        }
 
        private void keyHandler(Key key, bool bIsDown)
        {
            switch (key)
            {
                case Key.Left:
                    leftButton = bIsDown;
                    break;
 
                case Key.Right:
                    rightButton = bIsDown;
                    break;
 
                case Key.Up:
                    thrustButton = bIsDown;
                    break;
 
                case Key.Shift:
                    probeButton = bIsDown;
                    //The two lines below allow the player to fire missile faster if he
                    // or she press the fire button repeatedly
                    if (!bIsDown)
                        probePauser = 0;
                    break;
 
                case Key.Ctrl:
                    fireButton = bIsDown;
                    //The two lines below allow the player to fire missile faster if he
                    // or she press the fire button repeatedly
                    if (!bIsDown)
                        firePauser = 0;
                    break;
 
                case Key.Enter:
                    validButton = bIsDown;
                    break;
            }
 
        }
Peut-être que je ne sais pas bien utiliser un moteur de recherche va savoir mais je n'ai pas trouvé de réponse à cette question.

Merci d'avance.