• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed MultiKliknięcie SFML

0 głosów
111 wizyt
pytanie zadane 9 sierpnia 2016 w C i C++ przez Munvik Dyskutant (9,350 p.)
zamknięte 10 sierpnia 2016 przez Munvik
Cześć. Nie wiem jak zapobiec takiej sytuacji, iż w pewnej metodzie mam if'a sprawdzającego czy został klikniety Enter. I gdy zostanie on wciśnięty gra wraca do menu. Ale w menu w update() mam również if'a sprawdzajacego czy został klikniety Enter.

Rzecz w tym, że jak klikne enter to gra wychwytuje to jako kilka przycisków 'Enter' i mi to przeszkadza...

Gra jest w SFML, ma ktoś jakiś patent na to ?
komentarz zamknięcia: Problem rozwiązany.
komentarz 10 sierpnia 2016 przez jpacanowski VIP (102,400 p.)

update()

3 odpowiedzi

+2 głosów
odpowiedź 10 sierpnia 2016 przez MetRiko Nałogowiec (37,150 p.)

Zastosuj tzw. flagę..
Jeżeli flaga jest opuszczona (0) oraz zostanie naciśnięty klawisz [Enter] -> podnieś flagę (ustaw na 1) oraz wykonaj odpowiednią operację (w tym wypadku przejście pomiędzy menu, a grą).
+ Jeżeli flaga jest podniesiona (1) i klawisz [Enter] nie jest naciśnięty -> opuść flagę (ustaw na 0).

komentarz 10 sierpnia 2016 przez Munvik Dyskutant (9,350 p.)
Masz na myśli zwykły bool tak ?
komentarz 10 sierpnia 2016 przez MetRiko Nałogowiec (37,150 p.)
Dokładnie
0 głosów
odpowiedź 9 sierpnia 2016 przez zmiennoimienny Mądrala (5,550 p.)
Najprostsze rozwiązanie jakie wpada mi do głowy:
Sprawdzaj czy Enter został puszczony po przejściu do Menu, jeżeli tak to dopiero wtedy sprawdzaj czy został wciśnięty.
Niezbyt eleganckie rozwiązanie, ale myślę że powinno działać :)
Pozdrawiam.
komentarz 9 sierpnia 2016 przez Munvik Dyskutant (9,350 p.)
Też miałem taki patent, może i słaby ale jednak go zaimplementuje, no dzięki ;)
0 głosów
odpowiedź 10 sierpnia 2016 przez criss Mędrzec (172,640 p.)
Input powinieneś sprawdzać tylko w jednym miejscu (jakiejś metodzie handleEvent() np.). Jeśli jest inaczej to najprawdopodobniej masz troche bałagan w swojej apce. Ew. źle cie zrozumiałem.
komentarz 10 sierpnia 2016 przez Munvik Dyskutant (9,350 p.)
Jest tak, w pewnej metodzie uptade() mam if (jeżeli został wcisniety klawisz) to przejdz do menu i teraz się bedzie wykonywała metoda menu, uptade().

A w niej też  też jest if  (jeżeli został wcisniety klawisz) to Rozpocznij grę
komentarz 10 sierpnia 2016 przez criss Mędrzec (172,640 p.)

Tylko... jak ta druga metoda łapie ten sam, już obsłużony event po raz drugi... Korzystasz z pollEvent, tak? 

Pop the event on top of the event queue, if any, and return it.

Więc nie wiem jakim cudem łapiesz drugi raz tego entera... Najlepiej pokaż kod.

Btw. myślę, że przydałby ci się wzorzec State. Poczytaj.

PS: Jak już ci zwrócił uwage jpacanowski - nie uptade, a update

komentarz 10 sierpnia 2016 przez Munvik Dyskutant (9,350 p.)

Nie korzystam z pollEvent. Korzystam z takiej instrukcji:

if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
backToMenu();

W tym momencie wykonuje się metoda klasy menu o nazwie update() tak jak to bywa w pętli gry.

void menu::update()
{
 if(sf::Keyboard::isKeyPressed(sf::Keyboard::Return))
 startGame();
}

Wychwytuje mi kilka enterów, bo nie potrafię nacisnąć enter tak czule, żeby komputer zrozumiał, że to 1 kliknięcie (zresztą nie na tym to polega). Wiem, że przy metodzie pollEvent jest opcja wyeleminowania tego problemu ale ja nie korzystam z tego.

Podobne pytania

0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 21 marca 2021 w C i C++ przez Capablanka Początkujący (320 p.)
0 głosów
0 odpowiedzi 92 wizyt
pytanie zadane 11 lutego 2021 w C i C++ przez nanautzin Użytkownik (910 p.)
0 głosów
2 odpowiedzi 155 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Maciek Pestka Nowicjusz (220 p.)

87,902 zapytań

136,488 odpowiedzi

304,301 komentarzy

58,284 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...