fsml - Fenster schließt sich, wenn Mauszeiger auf bestimmtem Punkt
-
Hallo,
ein völlig komisches Problem hält mich derzeit auf Trab und zwar habe ich ein SFML-Fenster. Wenn der Mauszeiger auf einen bestimmten Punkt in diesem Fenster zeigt, schließt es sich, obwohl für diesen Punkt keine Funktion angegeben ist à là "Wenn Mauszeiger dort, dann schließe"...Kennt jemand von Euch eine Lösung oder Ursache für das Problem?
-
Kommt irgendeine Zugriffsverweigerung oder Exception? Oder was ist an diesem Punkt?
Zeig mal den relevanten Code-Teil (wo arbeitest du mit Maus-Eingaben?).
-
while (Running) { if(!SpielGestartet) { App.Draw(sHauptmenü); } else { zeigeKarte(); } // Process events sf::Event Event; while (App.GetEvent(Event)) { if ((Input.IsMouseButtonDown(sf::Mouse::Left) && !SpielGestartet)) { if(Input.GetMouseX() > 670 && Input.GetMouseX() < 970 && Input.GetMouseY() > 189 && Input.GetMouseY() < 453) { SpielGestartet = true; } } if (Input.IsKeyDown(sf::Key::Left) && SpielGestartet && CameraX > 0) { CameraX -= 8; } if (Input.IsKeyDown(sf::Key::Right) && SpielGestartet && CameraX < BKarte * TILE_W - 900) { CameraX += 8; } if (Input.IsKeyDown(sf::Key::Up) && SpielGestartet && CameraY > 0) { CameraY -= 8; } if (Input.IsKeyDown(sf::Key::Down) && SpielGestartet && CameraY < HKarte * TILE_H - 600) { CameraY += 8; } if (Event.Type == sf::Event::Closed) { Running = false; } } // Display window contents on screen App.Display();
Der Debugger sagt, das Running einfach auf false gesetzt wird und das Fenster schließt sich kommentarlos
-
Du solltest die Echtzeit-Abfragen (
Input.IsKeyDown()
,Input.IsMouseButtonDown()
) nicht innerhalb der Event-Poll-Schleife setzen. Denn da werden die Ereignisse durchgegangen, die gerade auf dem Stapel sind, und so kann es vorkommen, dass du pro Frame mehrmals abfragst.Dass das aber der Grund für die Schliessung des Programms ist, bezweifle ich.
Geh doch deinen Code mit dem Debugger schrittweise durch oder lass dir jede Zeile den Status vonRunning
über die Konsole ausgeben, so kannst du den Fehler einschränken.Ach ja, und es wäre gut, wenn du anstatt der [code]- die [cpp]-Tags nutzen würdest.
-
Danke!
Das Problem ist weg und, was auch sehr scchön ist, das Programm ist schneller als vorher, da tatsächlich mehrmals pro Durchlauf abgefragt wurde. Auch das Scrollen ist nun schneller, obwohl es durch zusätzliche Abfragen pro Schleife doch hätte schneller sein müssen...
mfg
Mr X