SFML Problem(Sry kann des schwer in ne überschrift packen)
-
Hey, ich hab mit SFML ein Fenster erzeugt und bin auf ein Problem gestoßen. Wenn ich als nutzer das Fenster in der Größe ändere, dann "Updatet" es während ich es verziehe nicht. Also das Programm wird eigentlich dabei angehalten. Weiß jemand wie ich währendessen man das Fenster größer oder kleiner macht trzdem Code ausführen kann?
P.S Mit einem thread hab ich das schon probiert, aber es hat nur alles aufgehangen.
Und sry für Rechtschreibfehler oder so, darauf achte ich hier nicht wirklich.
-
sf::Window window(sf::VideoMode(800, 600), "My window", sf::Style::Resize);
das schonmal probiert? https://www.sfml-dev.org/tutorials/2.0/window-window.php
-
Damit stellt man leider nur ein das es in der größe veränderbar ist, aber nicht das ich während des events etwas anderes machen kann, danke trotzdem
-
-
Das löst leider auch nicht mein Problem, aber danke das du mir dabei so helfen willst.
-
Naja, du hast letztlich ja irgendwo ne Hauptschleife in der die Window Events und sowas abgefackelt wird und danach einmal dein Gamestate geupdatet und auch geredendert wird.
Meine Vermutung ist, dass für die Dauer des Resizing quasi dein Event Dispatch Loop nicht verlassen wird, so dass der Rest gar nicht erst ausgeführt werden kann.
Schau mal, ob das stimmt.
Falls ja, ist eine einfache Lösungsantwort: Sorg dafür, dass das nicht passiert, z.B. durch Multithreading. Aber Achtung, die Antwort ist easy, die Umsetzung nicht!
-
Scheint wohl nicht so einfach zu sein, s. Window rendering and event processing in Windows.
Die unten verlinkte Seite ist (mit neuer URL): Window drag keep rendering (solution) [SFML 2.0].Und hier noch eine ähnliche Anfrage an den SFML-Emntwickler: How to "unfreeze" a window while dragging it.
-
Unter Windows wird das resize Event leider erst nach dem verändern der Bildschirmgröße "geworfen"...
Ist bei SFML leider so...
Was bleibt also als Alternative? Du musst dir deine eigene Fensterklasse schreiben und die Events direkt behandelt, statt sie in eine Eventqueue zu packen. Das geht"relativ" simpel, SFML unterstützt dich dabei, hab ich auch schon hinter mir
-
Danke erstmal für die Antworten, bei den Threads komme ich leider überhaupt ncht weiter, da die threads nicht starten, obwohl ich es 1 zu 1 übertragen habe. Das mit der eigenen Fensterklasse hab ich schon so sehr grob umgesetzt, nur wie mache ich es, dass ich die events direkt behandele?