2010-04-21 3 views
3

private void Form1_KeyDown (expéditeur d'objet, KeyEventArgs e) { if (e.KeyCode == Keys.W) player1.moveUp(); if (e.KeyCode == Keys.NumPad8) player2.moveUp(); }pressions sur plusieurs touches qui font différents événements en C#

Dans le code ci-dessus, les méthodes moveUp incrémentent simplement une valeur. Je le veux afin que les deux touches puissent être pressées (ou maintenues enfoncées) en même temps et que les deux événements se déclenchent. Merci, Nevik

+0

Et quel est le problème? Je pense que votre code devrait fonctionner. Mais Nayan a une meilleure option. –

Répondre

4

Obtenez l'état du clavier et vérifiez l'état des touches que vous voulez.

Les événements ne sont pas la meilleure façon d'aller dans les jeux. Vous avez besoin d'une réponse plus rapide.

[DllImport("user32.dll")] 
public static extern int GetKeyboardState(byte [] lpKeyState); 
... 
byte[] bCharData = new byte[256]; 
GetKeyboardState(bCharData); 


Une autre façon, tirée de here,

[DllImport("user32.dll")] 
static extern short GetKeyState(VirtualKeyStates nVirtKey); 
... 
public static bool IsKeyPressed(VirtualKeyStates testKey) 
{ 
    bool keyPressed = false; 
    short result= GetKeyState(testKey); 

    switch (result) 
    { 
     case 0: 
      // Not pressed and not toggled on. 
      keyPressed = false; 
      break; 

     case 1: 
      // Not pressed, but toggled on 
      keyPressed = false; 
      break; 

     default: 
      // Pressed (and may be toggled on) 
      keyPressed = true; 
      break; 
    } 

    return keyPressed; 
} 


More links.

En fait, ceux-ci sont déjà disponibles sur le net. Essayez de chercher avant de demander. Ce sera plus rapide :)

+0

+1 C'est correct, les événements sont trop lents pour les jeux, si vous prenez soin du keystate dans votre "game loop" il sera à la fois plus rapide et beaucoup plus réactif –

2

Supposons que vous ayez une "boucle de jeu" qui met à jour l'objet que vous déplacez avec le clavier. L'événement KeyDown devrait changer l'état de l'objet en "déplacement vers le haut". Et votre boucle lui donne alors de nouvelles positions chaque fois qu'elle s'exécute.

L'événement KeyUp doit rétablir l'état "inactif". Si l'état est encore "en hausse".

Vous ne dépendez plus de la répétition d'une frappe pour maintenir l'objet en mouvement. Et n'aura aucun problème avec le joueur en appuyant sur plusieurs touches en même temps.

Questions connexes