Jak sprawdzić czy dowolny klawisz został wciśnięty SFML

0

Witam. Chciałbym napisać grę, do której potrzebuję wszystkich klawiszy liter z klawiatury, i nie mogę znaleźć czy jest prostszy sposób niż robienie dla każdej litery

if(sf::Keyboard::isKeyPressed(sf::Keyboard::A)) 

itd?

1

Eventy i KeyPressed a potem sprawdzenie kodu klawisza w evencie?
https://www.sfml-dev.org/tutorials/2.5/window-events.php

0

Jeżeli potrzebujesz użyć wszystkich klawiszy to w jaki sposób miałoby wyglądać prostsze API by móc sprawdzić każdy klawisz?
Niektóre biblioteki umożliwiają zarejestrowanie callbacka by sprawdzać eventy poza główną pętlą, ale nie jestem pewien czy to jest prostszy sposób, raczej alternatywa dla niektórych zastosowań i nie wiem czy SFML umożliwia coś takiego.

0

sf::Keyboard::Key jest enumem, w którym wszystkie litery są obok siebie. Zatem klawisze od A do Z możesz sobie spokojnie przelecieć w pętli.

for(auto k = sf::Keyboard::Key::A; k <= sf::Keyboard::Key::Z; ++k) {
    // jakies twoje rzeczy
}

Coś takiego powinno zadziałać.

0

@Sensacyjny Sebastian: Bardziej chcę coś w stylu, że wciskam np. J i funkcja zwróciłaby by mi wciśniętą literę

2

To możesz, jak zasugerował @alagner, nasłuchiwać na eventy KeyPressed. Eventy te zawierają informację, jaki klawisz został wciśnięty (dokumentacja) - możesz sprawdzić, czy code jest pomiędzy sf::Keyboard::Key:A a sf::Keyboard::Key::Z. Wartość numeryczna sf::Keyboard::Key:A to 0, a litery są po kolei (dokumentacja), więc w tym momencie już w zasadzie jesteś w domu.

0

Dzięki za pomoc. Udało się zrobić to co chciałem.

for(int i=0; i<letters.size(); i++)
    {
        if(sf::Keyboard::isKeyPressed&&event.Event::key.code==letters[i]->getLetter())
            std::cout<<"ta sama";
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1