Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SDL] Wykrycie wcisnietego przycisku

Ostatnio zmodyfikowano 2013-12-29 04:14
Autor Wiadomość
Kuaczor
Temat założony przez niniejszego użytkownika
[SDL] Wykrycie wcisnietego przycisku
» 2013-12-28 23:50:27
Mam taki problem: Gdy wcisnę strzałkę w prawo, a potem strzałkę w lewo ( wciśnięte są oba przyciski, obiekt zaczyna się poruszać w lewo ) to chce aby po puszczeniu któregoś z przycisku obiekt poruszał się w stronę, którą wskazuje dalej wciśnięty przycisk ( aktualnie po puszczeniu któregokolwiek zatrzymuje się). Mam nadzieje, że wytłumaczyłem to dosyć zrozumiale ;). Jakieś sugestie?

C/C++
while( SDL_PollEvent( & event ) )
{
    switch( event.type )
    {
    case SDL_KEYDOWN:
        if( event.key.keysym.sym == SDLK_ESCAPE ) quit = 1;
        else if( event.key.keysym.sym == SDLK_UP ) vertSpeed = 2.0;
        else if( event.key.keysym.sym == SDLK_DOWN ) vertSpeed = 0.3;
        else if( event.key.keysym.sym == SDLK_LEFT ) kierunek = - 1;
        else if( event.key.keysym.sym == SDLK_RIGHT ) kierunek = 1;
       
        break;
    case SDL_KEYUP:
        vertSpeed = 1.0;
        kierunek = 0;
        break;
    case SDL_QUIT:
        quit = 1;
        break;
    }
}
}

P-100450
Admixior
» 2013-12-29 04:14:02
Problem nie jest prosty. Nie programowałem nigdy z użyciem SDL'a ale domyślam się że problem leży w samym komunikacie "SDL_KEYDOWN" Jest on wysyłany gdy klawisze jest wciśnięty. Tylko teraz pojawia się kolejny problem. Komunikat jest wysyłany co stałą jednostkę czasu. Więc może się okazać że może być wysłany co ileś klatek lub kilka razy na klatkę (w zależności od ilości klatek na sekundę). Natomiast jak działa gdy wciśniemy i trzymamy kilka klawisze to można sprawdzić w edytorze tekstu trzymając różne klawisze ("aaaabbbb"), powinno się właściwie wtedy pokrywać z tym co napisałeś wyżej.
Być może SDL dostarcza coś takiego jak "aktualny obraz klawiatury" zapisany w postaci liczb/bool'ek w jakiejś klasie. Tego należy szukać w dokumentacji. I z tej klasy pobrać czy dany klawisz jest wciśnięty. Oczywiście to należałoby zrobić to po za pętlą odbierania komunikatów.  Jeśli SDL nie ma takiej klasy która przechowuje kopie ("zrzut") klawiatury, to trzeba pobrać bezpośrednio czy dany klawisz jest wciśnięty. Taką funkcję SDL już musi posiadać :)
P-100457
« 1 »
  Strona 1 z 1