2017-06-09 1 views
0

Dies ist mein Code in den letzten SFML 2.4.2SFML: waitEvent vor pollEvent Schleife aufgerufen wird

#include <SFML/Graphics.hpp> 
#include <iostream> 

int main() { 
sf::RenderWindow window(sf::VideoMode(800, 600), "My First SFML Game", sf::Style::Titlebar | sf::Style::Close); 

std::cout << "Press a key to continue" << std::endl; 
int i = 0; 
sf::Event event; 

while(window.isOpen()) { 

    while(window.pollEvent(event)) { 
     std::cout << "Polling event" << std::endl; 
     if(event.type == sf::Event::Closed) { 

      window.close(); 
     } 
    } 

    if(window.waitEvent(event)) { 
     if(event.type == sf::Event::Closed)std::cout << "Event Activated" << i++ << std::endl; 
    } 
} 
} 

Output die All Ereignis Activated Ausgabe, die Sie sehen, gedruckt wurde, als ich die Schließen-Schaltfläche geklickt und die ganze Umfrage Das Ereignis wurde gedruckt, als ich in oder aus dem Fenster kam. Polled Event wurde nicht gedruckt, obwohl ich in das Fenster geklickt habe! Mein Problem ist, pollEvents, warum wirst du nicht zuerst angerufen und das Fenster geschlossen, wenn du das Close-Event zuerst (anscheinend) bekommst, weil du zuerst geschrieben wurdest? Es macht keinen Sinn, warum die Methode "wait events" zuerst aufgerufen wird und dann que. Bitte helfen Sie.

Antwort

1

Wenn kein Ereignis vorliegt, wird pollEvent nicht wahr zurückgegeben und dann wird es nicht in Ihre Schleife eingegeben. Aber waitEvent stoppt das Programm, bis ein Ereignis empfangen wird.

lesen the documentation of SFML Events:

sf::Window::waitEvent - Diese Funktion blockiert: Wenn es kein ausstehendes Ereignis ist, dann wird es warten, bis ein Ereignis empfangen wird.
sf::Window::pollEvent - Diese Funktion blockiert nicht: Wenn kein ausstehendes Ereignis vorliegt, wird false zurückgegeben und Ereignis unverändert gelassen.

+0

Ist nicht die neueste 2.4.2? Was kann ich tun, um sicherzustellen, dass das Fenster geschlossen ist? Hier scheint es kein Problem zu geben: https://www.youtube.com/watch?v=blOBd49Io00 5:15. Warum funktioniert es hier, aber nicht auf meinem Computer? Da stimmt eindeutig etwas nicht. –

+0

Wie kann die Person im Video sein Fenster schließen, indem sie auf den X-Knopf klickt, aber nicht auf mich? –

+0

Ja, 2.4.2 ist die neueste SFML-Version im Moment, aber nicht die 2.0. Ich vermute, dass Sie vergessen haben, 'window.close();' hinzuzufügen, wenn Sie Ihre Ereignisse nach 'window.waitEvent()' überprüfen. Sie drucken nur "Event Activated" und sagen niemals, dass das Fenster geschlossen werden soll. Aber es ist wirklich Wehr, um Wahl und Warteereignis zu verwenden, wählen Sie einen, der Ihrem Wunsch entspricht. –

Verwandte Themen