Różnica między IsKeyDown (isKeyPressed()) a keypressed w sfml

0

Hey,
od jakiegoś czasu uczę się biblioteki SFML i mam taką zagwozdkę: otóż zdarzenia są wyłapywane i automatycznie przetwarzane w obiekcie event (w pętli).
Natomiast SFML umożliwia również odwołanie się do tych samych zdarzeń np. poprzez funkcję isKeyPressed() (w SFML 1.6 to była bodajże funkcja isKeyDown).
No i głowię się jaka jest między nimi różnica i kiedy należy użyć jedną a kiedy drugą?
Wstępne porównanie obu metod w mojej ocenie się w ogóle nie różni.

Czy mógłby mi ktoś wytłumaczyć na czym polega różnica i po co to jest tak zrobione? i które zdarzenia przetwarzać w pętli a które poza nią?
Z góry bardzo dziękuję za pomoc!

2

Szczerze mówiąc nie znam SFML, ale isKeyPressed zwraca aktualny stan klawiatury.

O ile dobrze rozumiem Twoje zdarzenia "w pętli" to jest to zapewne systemowa obsługa klawiatury. Jeśli wciśniesz jakiś klawisz to do okna z fokusem Windows wysyła wiadomość: "Naciśnięto przycisk!". isKeyDown jako, że pobiera rzeczywisty stan przycisków jest szybsze, ale w przypadku "zwiechy" możesz pominąć jakiś klawisz. (program robił coś innego, a ty w tym czasie wcisnąłeś i zwolniłeś jakiś przycisk). Z reguły jednak Eventy są do obsługi klawiatury, gdzie nie zależy Ci na aktualnym stanie, a na obsłudze wszystkich kliknięć. isKeyPressed zwraca aktualny stan klawiatury.

Pomyśl o tym tak. Program Ci się zawiesił, a Ty w tym czasie coś pisałeś. Eventy w pętli wypiszą cały tekst po "odwieszeniu". isKeyPressed nawet nie zauważy, że coś się działo.

Z drugiej strony. Robisz jakąś bijatykę. Falko wciska sobie strzałkę w lewo, a gra reaguje po sekundzie(eventy) - nie fajnie. Tutaj reakcja musi być (niemal) natychmiastowa.

0

Dzięki @Ola Nordmann
Ciągle mam mały mętlik w głowie i tak średnio to do mnie dociera...
Czyli rozumiem, że w przypadku obsługi eventów każde zdarzenie najpierw trafia do kolejki i prędzej czy później zostanie obsłużone.
Natomiast w przypadku isKeyPressed() zdarzenie jest od razu sprawdzane?
Ale czy w takim razie nie powinno wykonać się wolniej? Bo przecież musi poczekać na koniec pętli z eventami? ;/

1

Nie.
isKeyPressed jest typowym punkiem. Nie przejmuje się systemem i od razu pyta klawiatury.

Kolejka jest typowym Amerykaninem. Nic nie zrobi sam, tylko czeka aż system zrobi to za niego.

0

Ok, dziękuję za pomoc!

0

Mam jeszcze jedno pytanko: czy wiecie pod jakim hasłem powinienem szukać dokładnego wyjaśnienia tego problemu? Bo chciałbym o tym trochę poczytać (ciągle mam pewne wątpliwości), ale nawet nie wiem jak opisać ten problem w google ;/
Może znacie coś analogicznego z C++?
pozdrawiam i dziękuję

0

GetKeyState vs GetAsyncKeyState - ta sama różnica.
http://blogs.msdn.com/b/oldnewthing/archive/2004/11/30/272262.aspx

0

Dziękuję Ci bardzo @Ola Nordmann! Chyba właśnie o to mi chodziło ;-)
pozdrawiam

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