Witam.
Pracuję nad kodem Drag&Drop (Moje poprzednie pytanie: https://forum.pasja-informatyki.pl/346053/nie-dziala-kod-zlap-przeciagnij-pusc-c-sfml jeśli ktoś ma jakiś inny pomysł jak rozwiązać ten problem będę wdzięczny za odpowiedź).
Próbuję użyć Eventów w dwóch miejscach w kodzie, ale jak się okazuje działa tylko ten ustawiony na samym początku pętli głównej gry.
Taki zapis dział, ale nijak nie mi jest pomocny:
while (window->isOpen() && gameInfo->state == GameInfo::GAME)
{
sf::Event event;
while (window->pollEvent(event))
{
if (event.type == Event::KeyPressed && event.key.code == Keyboard::Escape)
window->close();
if (event.type == Event::Closed)
window->close();
if (event.type == Event::LostFocus)
paused = true;
switch (event.type)
{
case Event::MouseButtonPressed:
if (event.mouseButton.button == Mouse::Left)
{
cout << "START ";
}
break;
case Event::MouseButtonReleased:
if (event.mouseButton.button == Mouse::Left)
{
cout << "STOP ";
}
break;
}
}
// ...
Co ciekawe taki zapis nie działa (poprawnie wykonuje się tylko pierwsza pętla pollEvent):
while (window->isOpen() && gameInfo->state == GameInfo::GAME)
{
sf::Event event1;
while (window->pollEvent(event1))
{
switch (event1.type)
{
case Event::MouseButtonPressed:
if (event1.mouseButton.button == Mouse::Left)
{
cout << "START ";
}
break;
case Event::MouseButtonReleased:
if (event1.mouseButton.button == Mouse::Left)
{
cout << "STOP ";
}
break;
}
}
sf::Event event;
while (window->pollEvent(event))
{
if (event.type == Event::KeyPressed && event.key.code == Keyboard::Escape)
window->close();
if (event.type == Event::Closed)
window->close();
if (event.type == Event::LostFocus)
paused = true;
}
// ...
Co jeszcze ciekawsze taki zapis działa, ale także jest totalnie bezużyteczny, ponieważ blokuje wykonywanie całego programu:
while (window->isOpen() && gameInfo->state == GameInfo::GAME)
{
sf::Event event1;
while (window->pollEvent(event1))
{
switch (event1.type)
{
case Event::MouseButtonPressed:
if (event1.mouseButton.button == Mouse::Left)
{
cout << "START ";
}
break;
case Event::MouseButtonReleased:
if (event1.mouseButton.button == Mouse::Left)
{
cout << "STOP ";
}
break;
}
}
while (window->isOpen() && gameInfo->state == GameInfo::GAME)
{
sf::Event event;
while (window->pollEvent(event))
{
if (event.type == Event::KeyPressed && event.key.code == Keyboard::Escape)
window->close();
if (event.type == Event::Closed)
window->close();
if (event.type == Event::LostFocus)
paused = true;
}
}
// ...
Jest mi to w stanie ktoś wytłumaczyć? Byłbym bardzo wdzięczny za radę jak korzystać z kilku pętli "while (window->pollEvent(event))" na raz. Dodam jeszcze, że ta druga będzie się znajdowała w innym pliku.
Pozdrawiam.