Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

SDL2 Przyciski



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Biblioteki
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
shout



Dołączył: 09 Cze 2017
Posty: 2

PostWysłany: Pią Cze 09, 2017 3:07 pm  OP    Temat postu: SDL2 Przyciski Odpowiedz z cytatem Pisownia

Witam!

Mój problem polega na tym, że mam klasę inputManager w której są metody : KeyPressed(int key), KeyReleased(int key), które wyglądają następująco:

Kod:
bool InputManager::KeyPressed(int key)
{
    if (event.key.state == SDL_PRESSED && event.key.repeat == 0)
    {
        if (event.key.keysym.sym == key )
        {
            return true;
        }    
    }
    return false;
}

bool InputManager::KeyReleased(int key)
{
    if (event.key.state == SDL_RELEASED  && event.key.repeat == 0)
    {
        if (event.key.keysym.sym == key)
        {
            return true;
        }
    }
    return false;
}


Mam też 2 klasy, które wyświetlają obraz. W każdej z nich jest metoda Update(), która sprawdza czy przycisk jest wciśnięty (np. esc), jeśli tak zmieni obrazek z klasy1, na obrazek z klasy2.

Problem polega na tym, że gdy przytrzymam esc obrazki będą się ciągle zmieniać między sobą (22 razy dla każdej klasy). Chciałbym zrobić to w ten sposób, że gdy przycisnę i przytrzymam esc wtedy z klasy1 zmieni się na klase2 i zatrzyma, i dopiero wtedy kiedy puszczę i przycisnę ponownie zmieni się na klase1. Tutaj może filmik jak to wygląda : https://www.youtube.com/watch?v=-PlOogBonU0&feature=youtu.be
Pozdrawiam
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lethern



Dołączył: 09 Paź 2007
Posty: 1115

PostWysłany: Pią Cze 09, 2017 3:51 pm      Temat postu: Odpowiedz z cytatem Pisownia

Zapisuj stan, np. w postaci flagi, i obsługuj to jako przejścia z jednego stanu w inny stan? Wydaje isę, że rozróżniasz dwa stany (wyświetlanie z jednej lub drugiej klasa)

(Bo w tym momencie - tak jak zrozumiałem Twój opis problemu - robisz to bez zapamiętania jakiegoś stanu - ile razy złapie event, tyle razy wykona się akcja - gdybyś obsługiwał stan, to mógłbyś akcję wykonywać tylko w określonym stanie. Jeśli dobrze odczytałem, to zaczynasz w stanie "rysuje klasa A", wciśnięcie klawisza powoduje przejście w stan "rysuje klasa B", puszczenie klawisza powoduje powrót do stanu "rysuje klasa A")

Jednak patrząc na załączony kod, to nie mam pojęcia co tam się dzieje i dlaczego coś może nie działać, więc mój opis może się mijać z rozwiązaniem...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
shout



Dołączył: 09 Cze 2017
Posty: 2

PostWysłany: Pią Cze 09, 2017 4:08 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Nie chodzi mi tutaj o to, że gdy przytrzymam klasa1 zmieni się na klase2, a jak puszczę to znów na klase1, tylko o to, że gdy przytrzymam esc, wtedy z klasy1 zmieni się na klase2 i jak puszę to nadal jest ta klasa2, aż do momentu, kiedy znów kliknę esc. Może słabo to opisałem w tym momencie... Przykład: gra cs go, jestem już na mapie np. de_dust2 chce zmieć sobie np. głośność, klikam esc i włączają mi się opcje, potem znów klikam esc i wracam do gry. Nie jest tak, że jak przytrzymam esc obraz zaczyna mi migać z opcji do gry, z gry do opcji itd.
Pytałem się kiedyś takiej osoby, dostałem wtedy odpowiedź, że powinienem użyć zmiennej boolean, ale próbowałem wszystkich opcji z tą zmienną, nawet takich, które nie miały żadnego sensu.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lethern



Dołączył: 09 Paź 2007
Posty: 1115

PostWysłany: Pią Cze 09, 2017 5:18 pm      Temat postu: Odpowiedz z cytatem Pisownia

Wciśnięty Esc, wykonujesz akcję, wciśnięty drugi raz, wykonujesz inną akcję - nie rozumiem gdzie może leżeć problem? Jeśli nie tu, to idąc dalej
Może masz problem z określeniem "wciśnięty klawisz", bo może "pressed" to nie jest event określający wciśnięcie klawisza które tu mam na myśli, tylko zachowuje się jako "trzymanie klawisza". Jeśli nie masz obsługi eventa pojedynczego wciśnięcia klawisza, to potrzebujesz to jakoś obejść - pierwszy press key jest wciśnięciem klawisza, kolejne press key są ignorowane tak długo aż pojawi się release key

Ponownie, próbuje zrozumieć jak ten problem się pojawia, ale to nie pasuje do kodu który zamieściłeś
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Biblioteki Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.11815 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |