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

question-closed MultiKliknięcie SFML

Object Storage Arubacloud
0 głosów
208 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 (101,940 p.)

update()

3 odpowiedzi

+2 głosów
odpowiedź 10 sierpnia 2016 przez MetRiko Nałogowiec (37,110 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,110 p.)
Dokładnie
0 głosów
odpowiedź 9 sierpnia 2016 przez zmiennoimienny Mądrala (5,540 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,590 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,590 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 128 wizyt
pytanie zadane 21 marca 2021 w C i C++ przez Capablanka Początkujący (320 p.)
0 głosów
0 odpowiedzi 145 wizyt
pytanie zadane 11 lutego 2021 w C i C++ przez nanautzin Obywatel (1,510 p.)
0 głosów
2 odpowiedzi 569 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez Maciek Pestka Nowicjusz (220 p.)

92,545 zapytań

141,387 odpowiedzi

319,503 komentarzy

61,930 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...