otojestemsobieja2008 Napisano Czerwiec 25, 2008 Zgłoś Share Napisano Czerwiec 25, 2008 Witam, piszę prostą aplikację w C++ z wykorzystaniem bibliotek SDL. Polega na tym, że mamy ludzika, którego za pomocą strzałek na klawiaturze możemy poruszać lewo/prawo. Kod do obsługi zdarzeń (główna pętla programu) napisałem tak: KOD while (!koniec) { sdl.clear(); //czyścimy okno aplikacji while (SDL_PollEvent (&event)) { switch (event.type) { case SDL_QUIT: koniec=true; break; case SDL_KEYDOWN: if( event.key.keysym.sym == SDLK_f ) { // tataj jakieś instrukcje odnośnie restartu aplikacji (nieistotne)}; break; case SDL_KEYUP: hero.stand(); break; } } if( event.key.keysym.sym==SDLK_LEFT && event.type == SDL_KEYDOWN ) hero.moveLeft(); if( event.key.keysym.sym==SDLK_RIGHT && event.type == SDL_KEYDOWN ) hero.moveRight(); sdl.blit( &hero ); //pokazujemy chłopka na ekran sdl.refresh(); //flip, wyrównanie czasu gry itd } Problem 1: Po części to działa. Po części bo działa tak: wciskamy klawisz "prawo" to chłopek biegnie w prawo - OK. teraz wciskamy klawisz "lewo", ale nie puszczając klawisza "prawo" to chłopek bieganie w lewo - OK. Ale jeśli teraz puścimy klawisz "prawo" to chłopek zatrzyma się, ponieważ ostatnie zdarzenie jakie pobrał SDL_PollEvent to puszczenie klawisza. Owszem mam to zdefiniowane w switchu że puszczenie klawisza oznacza stanie chłopka, ale nawet jak to wywale z kodu to i tak problem się powtarza. Zupełnie nie wiem jak sobie z tym poradzić. Problem2: Jeśli trzymam strzałkę (lewo/prawo) chłopek biegnie (lewo/prawo) ale jeśli (nawet trzymając cały czas klawisz) poruszę myszką, chłopek zatrzymuje się. Też wygląda mi na to, że SDL pobiera jako ostatnie zdarzenie ruch myszką Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Czerwiec 25, 2008 Zgłoś Share Napisano Czerwiec 25, 2008 tworzysz tablice typu boolean gdzie indeks oznacza kod klawisza i z niej pobierasz czy kalwisz jest wcisniety czy nie. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
otojestemsobieja2008 Napisano Czerwiec 25, 2008 Autor Zgłoś Share Napisano Czerwiec 25, 2008 nawet jeśli tak zrobię, to muszę obmyślić kilka warunków (co jest wciśnięte a co nie) żeby przypisał odpowiednią wartość w odpowiednim miejscu tablicy. A jeśli potem będę miał w aplkacji 20 klawiszy do użycia? Trochę tych warunków będzie. Link do komentarza Udostępnij na innych stronach More sharing options...
TSr Napisano Czerwiec 25, 2008 Zgłoś Share Napisano Czerwiec 25, 2008 A jeśli potem będę miał w aplkacji 20 klawiszy do użycia? Trochę tych warunków będzie. Ze 20... Ja nie widzę problemu. Warunków może być dużo. Przykładowo 20 dla OnKeyDown i 20 dla OnKeyUp i w każdym z nich odpowiednio ustawiasz pola z tablicy bool'ów. Następnie w głównej pętli programu tylko sprawdzasz czy dana zmienna logiczna, np. do przesuwania w prawo, jest ustawiona i przesuwasz postać lub nie. Ubuntu.pl user #10593 Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Czerwiec 26, 2008 Zgłoś Share Napisano Czerwiec 26, 2008 Polecam przejrzenie http://info.wsisiz.edu.pl/~szymank0/doku.p...dl:sdltutorial4 W SDLu są funkcje do sprawdzania czy dany przycisk jest wciśnięty. (SDL_KEYDOWN/SDL_KEYUP) Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.