2017-05-09 2 views
0

Ich habe ein Beispiel erstellt, in dem ich 2 Fenster zur gleichen Zeit geöffnet habe und window1 kann Ereignisse behandeln, während window2 geöffnet ist. Ich habe die Farbe des aktuellen Fensters geändert, um anzuzeigen, dass es funktioniert (während window1 geöffnet ist, wenn ich die Maus bewege, wird window2 grüner und grüner). Aber obwohl window1 nicht mit Ereignissen umgehen kann, während Fenster 2 geöffnet ist, kann ich die window1 Position immer noch nicht ändern. Ich möchte das nicht schaffen.Entwickeln von SFML-Framework

#include <SFML/OpenGL.hpp> 
#include <SFML/Window.hpp> 
#include <SFML/Graphics.hpp> 

using namespace std; 

sf::Event event; 

int main() 
{ 
    sf::RenderWindow window1(sf::VideoMode(600, 600), "Window1"); 
    sf::RenderWindow window2(sf::VideoMode(300, 300), "Window2"); 

    int r=0,g=0; 
    while (window1.isOpen()) 
    { 

     if(window2.isOpen()==false) 
      while (window1.pollEvent(event)) 
      { 
       if (event.type == sf::Event::Closed) 
        window1.close(); 
       r=(r+1)%255; 
      } 
     else 
     { 
      while (window2.pollEvent(event)) 
      { 
       if (event.type == sf::Event::Closed) 
        window2.close(); 
       g=(g+1)%255; 
      } 
     } 
     window1.clear(sf::Color(r,0,0)); 
     window1.display(); 


     window2.clear(sf::Color(0,g,0)); 
     window2.display(); 
    } 

    return 0; 
} 

Wie mache ich das?

Antwort

0

Es gibt keine direkte Funktionalität in SFML für diese (obwohl ich erwarte, dass es möglich ist, plattformspezifischen Code), aber es gibt ein paar Workarounds:

  1. Ändern der Fensterstil zu sf :: Stil ::Keiner. Dies ist schnell und einfach, hat aber den Effekt, dass Sie die Titelleiste und den Fensterrahmen entfernen, die Sie nicht möchten.
  2. Brute force die Fensterposition, entweder durch manuelle Einstellung der Position jeder Render, oder Prüfung auf eine Positionsänderung und Umkehrung.