Autor Wątek: wcisniete przyciski  (Przeczytany 2149 razy)

Offline goq123

  • Użytkownik

# Grudzień 30, 2013, 20:38:04
Witam
pisze gre w sdlu dla max 4 graczy i kazdy uzywa 2 klawiszy i szukam sposobu zeby zapisac w zmiennej wszystkie klawisze trzymane w danym momencie z tego co widze sdl obsluguje tylko wcisniecie i puszczenie i nie bardzo wiem jak to zrobic

dla przykladu zrobilem prosty kod ktory przy wcisnieciu przycisku rysuje losowy prostokąt, super ale chcialbym zeby trzymajac przycisk rysowal go ciągle a nie ze musze nacisnac puscic i znow nacisnac

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

# Grudzień 30, 2013, 21:27:12
Możesz zrobić gdzieś w np. zmiennych globalnych coś ala
bool keys[512] = {false};Następnie w pętli tam gdzie obsługujesz te eventy SDLa po przyciśnięciu klawisza robisz keys[pressedKeyCode] = true;A po puszczeniu klawisza
keys[upKeyCode] = false;Z tego co wiem masz nawet funkcje chyba SDL_GetKeyState, która robi za Ciebie to o czym pisałem wyżej.
Uint8 *keys = SDL_GetKeyState(0);
if(keys[(int)'a']) ...

Następnie dalej w pętli głównej programu robisz np.
if(keys[(int)'A'])
{
   drawQuad();
}
i tyle :)

Korzystając z SDLa zawsze tak robiłem i zdawało to egzamin.
Baa nawet znalazłem na lazyfoo to o co mi chodzi http://lazyfoo.net/SDL_tutorials/lesson10/index.php

Jeżeli używasz SDL2.0 to myślę, że jest podobnie :)
« Ostatnia zmiana: Grudzień 30, 2013, 21:35:18 wysłana przez Rokuzo »

Offline ArekBal

  • Użytkownik

# Grudzień 31, 2013, 10:42:33
Radę kolegi uzupełnię o to że gdy będzie taka potrzeba to bezpieczniej jest rejestrować wszystkie zmiany (np. obsłużyć zdarzenia) niźli w pętli sprawdzać zmiany na inpucie.

Dobrze i wygodnie jest tak zacząć (od obsługi w "update"), ale gdy trzeba coś napisać (np. imię bohatera), albo wklepać EWGF to może nam pętli nie wystarczyć by to dobrze obsłużyć).

Offline Rokuzo

  • Użytkownik
    • Masz na sprzedaż klucze do cs go?

# Grudzień 31, 2013, 16:40:17
Tak, kolejkowanie zdarzeń m.in. wciśnięcie klawiszy.

Wykorzystując odpowiedni kontener przechowujemy kolejne zdarzenia. (pozwala to nam też je ograniczać np. limit kilkunastu stuknięć klawiatury albo chociaż sprawdzić odstęp czasowy między kolejnymi zdarzeniami) Następnie jakąś pętlą czy czymś takim przelatujemy przez tą kolejkę odczytując i interpretując kolejne zdarzenia.

Czy o coś takiego chodzi @ArekBal? Czytałem o tym, ale jeszcze nie miałem okazji implementować :)

Offline ArekBal

  • Użytkownik

# Grudzień 31, 2013, 21:12:07
rxcpp dla tych co znajo. ;)