2011-06-13 4 views
1

Voici ce que j'ai jusqu'à présent:Comment puis-je avoir un statut KMOD différent pour une seule touche dans Pygame?

for event in pygame.event.get(): 
    if event.type == KEYDOWN: 
     if event.key == K_LEFT: 
      mods = pygame.key.get_mods() 
      if mods and KMOD_SHIFT: 
       movei = -5 
      if mods and KMOD_CTRL: 
       movei = -20 
      else: 
       movei = -10 

Le problème est qu'il semble que ramasser un ou l'autre (ou KMOD_SHIFT KMDO_CTRL) TOUT LE TEMPS, non sélective. Donc peu importe le modificateur sur lequel j'appuie (shift, alt, ctrl etc.) l'effet est toujours le même. L'effet que je vais faire est que le personnage à l'écran peut se glisser, courir ou marcher, respectivement.

Merci d'avance.

Répondre

1

Vous utilisez le logique opérateur and, alors que vous avez vraiment besoin peu sage opérateur &. Au lieu de

if mods and KMOD_SHIFT: 

vous voulez

if mods & KMOD_SHIFT: 

La logique and renvoie la valeur du deuxième opérande tant que le premier a une vraie valeur (dans ce cas, pas égal à 0). L'opérateur & effectuera une opération AND au niveau des bits et retournera donc une valeur non nulle (logiquement interprétée comme vraie) uniquement si certains des bits de la constante KMOD sont activés dans la variable mods.

Questions connexes