[SDL]Powtarzanie klawiszy podczas poruszania sie postaci
Ostatnio zmodyfikowano 2011-01-26 20:32
Savail Temat założony przez niniejszego użytkownika |
[SDL]Powtarzanie klawiszy podczas poruszania sie postaci » 2011-01-24 12:22:49 Hej A wiec postac porusza sie po wcisnieciu strzalki w prawo i jesli w przeciagu kolejnej sekundy klawisz strzalki zostal 2 razy wcisniety to chcialbym aby postac zaczela biec. Kombinowalem troche i brak mi juz pomyslow a "najlepsze" co mi wyszlo to chyba to: size_t last_ticks = SDL_GetTicks(); bool run = false; bool run_start = false;
if( key[ SDLK_RIGHT ] ) Walk();
size_t ticks = SDL_GetTicks(); double delta_time =( ticks - last_ticks ) / 1000.0; if( delta_time > 1 ) { last_ticks = ticks; if( key[ SDLK_RIGHT ] && SDL_RELEASED ) { run = true; } if( key[ SDLK_RIGHT ] && SDL_PRESSED && run == true ) { run_start = true; } if( SDL_RELEASED ) run_start = false; } if( run_start == true ) Run();
Ale nie dziala jak nalezy ;p. Postac po 2 kliknieciach strzalki nie zaczyna biec tylko nadal jest wykonywana funkcja Walk() Moze ktos zna szybkie rozwiazanie na powtarzanie tych samych klawiszy? |
|
ThudPoland |
» 2011-01-24 12:38:01 size_t last_ticks = SDL_GetTicks(); bool run = false; bool run_start = false;
size_t ticks = SDL_GetTicks(); double delta_time =( ticks - last_ticks ) / 1000.0; if( delta_time > 1 ) { last_ticks = ticks; if( key[ SDLK_RIGHT ] && SDL_RELEASED ) { run = true; } if( key[ SDLK_RIGHT ] && SDL_PRESSED && run == true ) { run_start = true; } if( SDL_RELEASED ) run_start = false; } if( run_start == true ) Run(); else Walk(); Nie testowałem tego, ale wypróbuj. |
|
Savail Temat założony przez niniejszego użytkownika |
» 2011-01-24 13:03:26 nie dziala niestety ;/ i dodatkowo postac porusza sie nawet jesli strzalka nie byla wcisnieta w powyzszym kodzie |
|
SeaMonster131 |
» 2011-01-24 13:30:10 Sprawdzasz czy przycisk został naciśnięty, jeżeli tak to zaczynasz odliczać czas. Jeżeli miną np 2 sekundy a klawisz nie został jeszcze raz naciśnięty to nic nie robisz. Ale gdy w ciągu tych 2 sekund naciśnięto ten sam klawisz to wtedy wykonujesz odpowiednią czynność czyli te biegnięcie :)
//ehh..widze że to właśnie zrobiłeś, ale Ci nie działa :) sorry |
|
DejaVu |
» 2011-01-24 13:32:51 if( key[ SDLK_RIGHT ] && SDL_RELEASED ) { run = true; }
Czy powyższy wiersz nie powinien przypadkiem wyglądać tak:
if( key[ SDLK_RIGHT ] & SDL_RELEASED ) { run = true; }
|
|
Savail Temat założony przez niniejszego użytkownika |
» 2011-01-24 15:07:43 problem polega chyba na tym ze program nie rozpoznaje tych stalych: SDL_RELEASED i SDL_PRESSED. One znajduja sie jako pola w strukturze SDL_Event. Mam juz jednak jedna funckje z SDL_PollEvent i zdaje mi sie ze nie moze byc 2 takich funkcji bo probowalem i nie czyta mi tego tak jakby ;p |
|
ThudPoland |
» 2011-01-24 18:54:01 <<Usunięte przez użytkownika>> |
|
Savail Temat założony przez niniejszego użytkownika |
» 2011-01-24 21:11:03 jakos nie za bardzo rozumiem :P |
|
« 1 » 2 3 |