2017-09-09 1 views
0

J'ai commencé à déconner avec C++ et SFML 2.4 et je l'apprécie jusqu'à présent, mais j'ai rencontré un problème de performance frustrant en essayant même de déplacer un simple rectangle blanc autour de l'écran. Déplacer le sprite est très nerveux et "injouable" même en utilisant l'heure delta. Il semble provenir d'un sondage pour les événements de fenêtre. Une fois enlevé, tout est lisse comme du beurre mais les événements ne peuvent pas être lus (bien sûr). Y a-t-il un problème avec ce que je fais ou quoi que ce soit que je puisse faire pour résoudre ce problème?Problèmes SFML fps avec l'interrogation d'événement de fenêtre

exemple minimal:

#include <SFML/Graphics.hpp> 

int main(){ 
    sf::RenderWindow window(sf::VideoMode(500, 500), "Testing"); 

    sf::Image pixelBuffer; 
    pixelBuffer.create(100, 100, sf::Color::White); 
    sf::Texture pixelTexture; 
    pixelTexture.loadFromImage(pixelBuffer); 
    sf::Sprite pixelSprite; 
    pixelSprite.setTexture(pixelTexture); 

    sf::Clock clock; 
    while(window.isOpen()){ 
     //Poll for events 
     sf::Event event; 
     while(window.pollEvent(event)){ 
      if(event.type == sf::Event::Closed){ 
       window.close(); 
      } 
     } 
     //Update the sprite 
     float delta = clock.restart().asSeconds(); 
     pixelSprite.move(sf::Vector2f(50, 50) * delta); 
     //Draw the sprite 
     window.clear(sf::Color::Black); 
     window.draw(pixelSprite); 
     window.display(); 
    } 
} 

Merci!

+0

vous dites que pollEvents provoque fps drops mais vous n'incluez même pas la fonction dans la question. Faire un exemple minimal de travail complet. Et vous ne voulez probablement pas redémarrer l'horloge à chaque itération. – Sopel

+0

En fait, j'ai fait si vous regardez l'extrait de code dans la méthode run() et placé un commentaire sur la méthode où il est appelé. Je viens de supprimer les autres méthodes pour que vous puissiez le lire plus facilement. –

+0

ne ressemble pas à une source du problème, poster un exemple complet minimal que je peux copier et compiler – Sopel

Répondre

0

Y a-t-il une chance qu'aucun contrôleur de jeu ne soit connecté et exécute cet exemple sous Windows?

Si tel est le cas, vous souffrez probablement d'un bogue connu qui a été corrigé dans le référentiel de code de SFML. Il suffit de télécharger et compiler la dernière version (master branche) à partir du official repository, le compiler et l'installer et les problèmes devraient disparaître.

Pour contourner le problème, connectez n'importe quel contrôleur de jeu compatible avec DirectInput (par exemple, joystick ou manette de jeu).

+0

J'utilise actuellement le 2.4.2 (je l'ai téléchargé depuis la page des téléchargements) mais je pourrais essayer de le recompiler peut-être et je suis exécuter cet exemple sous windows avec Visual Studio. J'ai juste essayé de connecter un gamepad et le bégaiement a persisté mais semble fonctionner correctement quand j'ai deux gamepads connectés? Est-ce une chose Windows? Merci! –

+0

La compilation de la dernière version (branche principale) ne l'a pas corrigée, donc je vais devoir simplement brancher deux manettes pour le moment comme une solution temporaire: /, doit être ma configuration os/matériel particulière. Merci pour l'aide si! –

+0

@AaronShappell Vraiment étrange car cela ne devrait plus arriver. Alors, le problème est-il parti une fois qu'il y a au moins une manette connectée? – Mario