2017-09-17 7 views
-4

J'ai un problème avec mon projet sfml en C++. Après avoir compilé et exécuté ce code simple, je commence à utiliser ma souris dans la fenêtre (le code est un algorithme de pathfinding très simple, dans lequel, où je clique, c'est où la texture "ch" va) et aprox. 10 secondes environ, la fenêtre ne répond plus. La seule fois où le programme ne plante pas, c'est quand je l'exécute en mode débogage. J'ai eu ce problème il y a quelque temps avec un projet plus important, mais à cause de ce problème, j'ai abandonné. Je crois que le crash du programme a quelque chose à voir avec l'utilisation de la souris, car dans le plus gros projet j'ai déjà démarré et planté de la même manière que les fonctions de la souris sfml, et quand compilé et exécuté en mode débogage, il n'a pas crash. Je suis en train de programmer dans la version de Code :: Blocks: 13.12, et la librairie SFML je ne sais pas quelle version. Je ne sais pas pourquoi cela arrive, alors demandez-vous de l'aide avec ce problème. Merci: DMon projet sfml se bloque après ~ 10 secondes

Le code:

#include <SFML/Graphics.hpp> 
#include <iostream> 
#include <conio.h> 
#include <windows.h> 

using namespace std; 
using namespace sf; 

int main() 
{ 
RenderWindow win(VideoMode(700,700),"test"); 

float x=10,y=10; 
int mx=x,my=y; 
int mxo,myo; 

Texture t; 
t.loadFromFile("char.png"); 
Sprite ch; 
ch.setTexture(t); 

ch.setPosition(x,y); 

while(win.isOpen()) 
{ 
    win.clear(); 
    if(Mouse::isButtonPressed(Mouse::Left)) 
    { 
     mx=Mouse::getPosition(win).x; 
     my=Mouse::getPosition(win).y; 
    } 
     if(x!=mx) 
     { 
      if(mx>x) 
      { 
       x++; 
      } 
      if(mx<x) 
      { 
       x--; 
      } 
      Sleep(2); 
     } 
     if(y!=my) 
     { 
      if(my>y) 
      { 
       y++; 
      } 
      if(my<y) 
      { 
       y--; 
      } 
      Sleep(2); 
     } 

     ch.setPosition(x,y); 
     win.draw(ch); 
    win.display(); 
} 
return 0; 
} 
+1

Avez-vous essayé de le déboguer? Aussi, vous ne semblez pas interroger les événements de la fenêtre de rendu. – VTT

+0

Vous ne répondez pas aux événements Windows. Regardez les exemples dans [la documentation] (https://www.sfml-dev.org/documentation/2.4.2/classsf_1_1RenderWindow.php) – PeterT

+0

J'ai changé la partie où la position de cette souris j'ai pris à un événement et il fonctionne très bien. Merci de votre aide. –

Répondre

2

Vous avez le blocage sommeils dans la boucle d'événement, et ne sont pas la gestion des événements.

Cela rend le système d'exploitation pense que le programme ne répond pas, et il vous dit que .

Il ne s'est pas réellement écrasé.

+0

J'utilise sleep parce que sinon le programme fait tout trop vite et je voulais voir le chemin que le programme calcule. Mais j'ai changé la partie où la position de la souris est prise pour un événement et fonctionne maintenant très bien. Merci pour votre aide: D –