Welcome, Guest. Please login or register. Did you miss your activation email?

Author Topic: Problème de keyrepeat  (Read 8318 times)

0 Members and 1 Guest are viewing this topic.

Negatio

  • Newbie
  • *
  • Posts: 11
    • View Profile
Problème de keyrepeat
« on: May 19, 2013, 06:23:42 pm »
Bonjour/bonsoir;

Je me trouve confronté a un problème assez handicapant. Lorsque j'appuie sur une touche mon "personnage" avance d'un pixel il se passe rien pendant environ une seconde puis mon personnage avance normalement.

Je ne peut pas encore poster mon code (je ne suit pas sur mon ordi). Mais je voudrait savoir si quelqu'un a déjà eu ce problème et a quoi ca peut être du. En attendant dites moi quelle-est la meilleur manière de vous faire acquérir mon code (étant assez gros et en plusieurs fichier).

Merci de votre participation ^^

kimci86

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re : Problème de keyrepeat
« Reply #1 on: May 19, 2013, 06:42:02 pm »
Bonjour,
Au lieu d'utiliser les évènements Event::KeyPressed comme tu sembles le faire, utilise la fonction Keyborad::isKeyPressed.
Lorsque l'on garde une touche enfoncée, Event::KeyPressed est émis une fois puis, après un court instant, il est réémis en continu si la répétition automatique des touches est activée. Avec isKeyPressed, tu peux savoir à tout moment si une certaine touche est enfoncée.

Negatio

  • Newbie
  • *
  • Posts: 11
    • View Profile
Re : Problème de keyrepeat
« Reply #2 on: May 19, 2013, 06:45:50 pm »
Merci de ta réponse mais je ne comprend pas vraiment. Event::KeyPressed sert juste a vérifier si l'evénement est 'une touche a été pressée' non? Comment voudrait tu que je teste quelle touche a eté pressé avec Event::KeyPressed? De toute façons j'utilise Keyborad::isKeyPressed.

kimci86

  • Full Member
  • ***
  • Posts: 128
    • View Profile
Re : Problème de keyrepeat
« Reply #3 on: May 19, 2013, 06:54:31 pm »

Negatio

  • Newbie
  • *
  • Posts: 11
    • View Profile
Re : Problème de keyrepeat
« Reply #4 on: May 19, 2013, 07:16:19 pm »
Quote
Je t'invite à lire le tutoriel.
Deja fait de nombreuses fois et je me répète j'utilise sf::Keyboard::isKeyPressed() et non sf::Event::KeyPressed() :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : Problème de keyrepeat
« Reply #5 on: May 19, 2013, 08:20:52 pm »
Quote
En attendant dites moi quelle-est la meilleur manière de vous faire acquérir mon code (étant assez gros et en plusieurs fichier).
Puisque ton problème se situe au niveau de la fonction Keyboard::isKeyPressed, écris un main() tout simple qui déplace une forme simple en utilisant cette fonction. Pour le moment on se fiche un peu de tout ce qu'il y a d'autre dans ton gros code ;)
Et si ce code marche (ce qui sera sûrement le cas), alors là commence à voir quelles différences il y a entre ce code qui marche et ton code original qui ne marche pas. Et là si tu es rigoureux tu tomberas forcément sur le bug.
Laurent Gomila - SFML developer

G.

  • Hero Member
  • *****
  • Posts: 1599
    • View Profile
Re : Re : Problème de keyrepeat
« Reply #6 on: May 19, 2013, 11:59:03 pm »
Quote
Je t'invite à lire le tutoriel.
Deja fait de nombreuses fois et je me répète j'utilise sf::Keyboard::isKeyPressed() et non sf::Event::KeyPressed() :)
Ton isKeyPressed, il est à l'intérieur de ta boucle d'évènement ? Si oui, c'est probable que c'est pas là que tu veux vraiment l'y mettre.

Negatio

  • Newbie
  • *
  • Posts: 11
    • View Profile
Re : Problème de keyrepeat
« Reply #7 on: May 20, 2013, 11:51:41 am »
Quote
Puisque ton problème se situe au niveau de la fonction Keyboard::isKeyPressed, écris un main() tout simple qui déplace une forme simple en utilisant cette fonction. Pour le moment on se fiche un peu de tout ce qu'il y a d'autre dans ton gros code
Et si ce code marche (ce qui sera sûrement le cas), alors là commence à voir quelles différences il y a entre ce code qui marche et ton code original qui ne marche pas. Et là si tu es rigoureux tu tomberas forcément sur le bug.
Au début de mon projet j'avais tout mis dans le main et tout fonctionnait mais c'est depuis que séparais mon code en plusieurs classe que ca foire. Donc entre trouvais la différence entre presque rien et un code de plusieurs classe je vais un peu galérer mais bon.

Quote
Ton isKeyPressed, il est à l'intérieur de ta boucle d'évènement ? Si oui, c'est probable que c'est pas là que tu veux vraiment l'y mettre.
Non il est dans une fonction qui est appelé par certaine classe
bool EngineControl::isPressed(string keyString)
{
    if(Keyboard::isKeyPressed(keysConfig[keyString]))
    return true;

    else
    return false;
}
Bon je retourne essayer de trouver le caillou dans le bouillon.
Merci vous en tout cas :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : Problème de keyrepeat
« Reply #8 on: May 20, 2013, 05:56:24 pm »
Quote
Donc entre trouvais la différence entre presque rien et un code de plusieurs classe je vais un peu galérer mais bon.
Ben... et nous tu crois qu'on ferait quoi pour trouver la cause de ton problème ? ;)
Les forums c'est pas magique, pour ce genre de problème, si tu ne passes pas un peu de temps à faire des tests poussés, il est probable que personne n'arrive à t'aider.
Laurent Gomila - SFML developer

TheNoob

  • Newbie
  • *
  • Posts: 31
    • View Profile
    • Anonym0us.fr
Re : Problème de keyrepeat
« Reply #9 on: May 21, 2013, 12:05:02 am »
Lol c'est pas faux ça si y a une erreur dans ton code c'est pas aux autres de la chercher a ta place, surtout que si tu as écris le code, tu es probablement le plus apte à trouver rapidement d'où vient le problème.
Bonne continuation.
Vivement l'invention d'un debuggeur automatique!

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : Problème de keyrepeat
« Reply #10 on: May 21, 2013, 08:03:23 am »
Quote
Lol c'est pas faux ça si y a une erreur dans ton code c'est pas aux autres de la chercher a ta place
Si, quand même, sinon à quoi bon venir poster sur le forum ? Mais on peut le faire sur un code qui a déjà été réduit à son minimum, pas dans gros projet dont 99% du code est sans rapport avec l'erreur.
Laurent Gomila - SFML developer

TheNoob

  • Newbie
  • *
  • Posts: 31
    • View Profile
    • Anonym0us.fr
Re : Problème de keyrepeat
« Reply #11 on: May 21, 2013, 01:28:19 pm »
Ce que je veux dire par la c'est que si son erreur n'est pas due à ses conaissances mais à une faute qu'il est autant apte à repérer qu'une autre personne, il n'y a pas de raison de demander de l'aide. Après c'est peut être pas le cas içi et dans ce cas je m'excuse.
Vivement l'invention d'un debuggeur automatique!

Laurent

  • Administrator
  • Hero Member
  • *****
  • Posts: 32498
    • View Profile
    • SFML's website
    • Email
Re : Problème de keyrepeat
« Reply #12 on: May 21, 2013, 01:33:09 pm »
Disons que la plupart des erreurs qui bloquent les débutants peuvent être trouvées en un rien de temps par nos yeux d'experts ;)

Mais, je le répète, il faut que je posteur prépare le terrain ; jeter un gros projet à la figure du forum ne l'aidera pas, bien au contraire.
Laurent Gomila - SFML developer

Negatio

  • Newbie
  • *
  • Posts: 11
    • View Profile
Re : Problème de keyrepeat
« Reply #13 on: May 21, 2013, 05:43:41 pm »
Je suis désoler si j'ai pu paraître un peu abrupte mais je voulais juste savoir si mon problème était du a une "erreur courante", un bug ou si c’était réellement mon architecture qui posais problème.
Quote
Donc entre trouvais la différence entre presque rien et un code de plusieurs classe je vais un peu galérer mais bon.
Ben... et nous tu crois qu'on ferait quoi pour trouver la cause de ton problème ? ;)
Les forums c'est pas magique, pour ce genre de problème, si tu ne passes pas un peu de temps à faire des tests poussés, il est probable que personne n'arrive à t'aider.
Je ne voulait pas dire par là "j'ai flemme de chercher donc débrouiller-vous" je voulais dire que entre un code "normal" et mon ramassis de classe incohérentes il y'a beaucoup de differences. Mais maintenant que je sait que c'est pas mon utilisation des events qui est foireuse je vais pouvoir chercher une réponse par moi même. Je suis d'accord que nous somme dans un forum dédié a la SFML et donc que ce n'est pas l'endroit pour trouver LE problème qui n'a rien a voir avec la SFML. En tout cas merci pour ces réponses et je reviendrais si je comprend toujours pas mon(mes?) erreur(s?).
PS: Veuillez excuser mon orthographe, en relisant mes sujets je me suis aperçu que ca piquer un peu les yeux parfois.

EDIT:
Apres avoir fait un code minimal je m'aperçois que ca ne fonctionne toujours pas(même problème qu'avant) (ca doit vraiment venir de moi qui sait pas se servir de la sfml).
    RenderWindow m_window;
    m_window.create(sf::VideoMode(1920, 1080), "test 3", sf::Style::Fullscreen);
    m_window.setKeyRepeatEnabled(true);
    m_window.setFramerateLimit(50);
    m_window.setVerticalSyncEnabled(true);
    Texture m_texture;
    Sprite m_sprite;
    Image img;
    img.create(50, 50, Color::Blue);
    m_texture.loadFromImage(img);
    m_sprite.setTexture(m_texture);
    m_window.draw(m_sprite);
    Event m_event;
    while(m_window.isOpen())
    {
        while(m_window.pollEvent(m_event))
        {
            m_window.clear();
            m_window.draw(m_sprite);
            m_window.display();
            if(m_event.Closed)
            m_window.close();
            if(Keyboard::isKeyPressed(Keyboard::Escape))
            m_window.close();
            if(Keyboard::isKeyPressed(Keyboard::Down))
            {
                m_sprite.setPosition(m_sprite.getPosition().x, m_sprite.getPosition().y + 1);
            }
        }
    }
(du coup c'est un code vraiment minimal  ;D)
Je laisse ce code et son erreur qui doit être énorme sous vos yeux d'experts.
« Last Edit: May 22, 2013, 07:23:29 pm by Negatio »

G.

  • Hero Member
  • *****
  • Posts: 1599
    • View Profile
Re : Problème de keyrepeat
« Reply #14 on: May 22, 2013, 07:34:20 pm »
Wow.
Tu as TOUT mis dans la boucle d'évènement. Pas sûr que tu aies lu les tutoriels "de nombreuses fois", car même la façon dont tu check l'évènement Closed ressemble à rien. :o
« Last Edit: May 22, 2013, 07:54:06 pm by G. »

 

anything