2012-05-21 4 views
4

Im essayant d'obtenir l'entrée clé dans SFML 2, dans la SFML 1,6 im en utilisantClavier événement SFML 2.0

while (App.GetEvent(Event)) 
     { 
      if (App.GetInput().IsKeyDown(sf::Key::Down)) { dir='d'; } 
    } 

Mais je ne sais pas comment faire cela dans SFML 2.

+0

La documentation contient toutes les informations dont vous pouvez avoir besoin: http://sfml-dev.org/documentation/2.0/ –

+0

http://sfml-dev.org/documentation/2.0/classsf_1_1Event.php pour être exact – elimirks

Répondre

14

Lorsque vous Ne vous inquiétez pas de la saisie au clavier en temps réel, vous pouvez utiliser une approche très similaire au code SFML 1.6 que vous avez fourni. Dans la boucle de traitement des événements de votre application, vous pouvez faire quelque chose comme ceci:

sf::Event event; 
while (mWindow.pollEvent(event)) 
{ 
    if (event.type == sf::Event::KeyPressed) 
    { 
     if (event.key.code == sf::Keyboard::Escape) 
     { 
      // Do something when Escape is pressed... 
     } 
     if (event.key.code == sf::Keyboard::W) 
     { 
      // Do something when W is pressed... 
     } 

     // And so on. 
    } 
} 

Ce type de traitement d'entrée est agréable quand vous devez garantir votre application a le focus lorsque l'utilisateur appuie sur la touche, comme les événements clés ne sont pas générés autrement. Il est également idéal lorsque la touche en question est rarement utilisée. Vous pouvez en trouver un exemple dans les tutoriels SFML 2.0, sous la section intitulée «Les événements KeyPressed et KeyReleased»: http://sfml-dev.org/tutorials/2.0/window-events.php

D'autre part, vous pouvez avoir besoin d'un accès au clavier en temps réel. Pour ce faire, utilisez la classe Keyboard SFML 2.0 comme ceci:

if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) 
{ 
    // 'W' is currently pressed, do something... 
} 

Avec l'entrée en temps réel, vous accédez à l'état du dispositif d'entrée à ce moment précis dans le temps. C'est pratique car vous n'avez pas besoin de regrouper toutes vos vérifications clés dans votre boucle de traitement des événements. Un inconvénient de cette approche est que SFML ne fait que lire l'état du clavier, votre code de gestion d'événements peut encore s'exécuter si l'application n'a pas de focus, est minimisée, etc. Vous pouvez trouver un tutoriel sur toutes les entrées en temps réel ici: http://sfml-dev.org/tutorials/2.0/window-inputs.php

Soyez prudent dans le choix du traitement des événements par rapport à l'approche en temps réel. Pour un exemple de jeu, considérez une situation où un personnage tire une mitrailleuse lorsque l'utilisateur maintient la barre d'espace. Si vous manipulez la barre d'espace dans la boucle de traitement d'événement, la mitrailleuse se déclenche incorrectement comme une semi-automatique puisqu'il y a un délai entre sf::Event::KeyPressed événements pour la même touche, même si l'utilisateur maintient la touche enfoncée. Si vous manipulez la barre d'espace en vérifiant avec la saisie au clavier en temps réel, la mitrailleuse se déclenchera à plusieurs reprises, comme prévu.