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

[SDL]Powtarzanie klawiszy podczas poruszania sie postaci

Ostatnio zmodyfikowano 2011-01-26 20:32
Autor Wiadomość
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:
C/C++
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?
P-26977
ThudPoland
» 2011-01-24 12:38:01
C/C++
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.
P-26978
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
P-26980
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
P-26985
DejaVu
» 2011-01-24 13:32:51
C/C++
if( key[ SDLK_RIGHT ] && SDL_RELEASED ) { run = true; }
Czy powyższy wiersz nie powinien przypadkiem wyglądać tak:
C/C++
if( key[ SDLK_RIGHT ] & SDL_RELEASED ) { run = true; }
P-26987
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
P-26993
ThudPoland
» 2011-01-24 18:54:01
<<Usunięte przez użytkownika>>
P-27004
Savail
Temat założony przez niniejszego użytkownika
» 2011-01-24 21:11:03
jakos nie za bardzo rozumiem :P
P-27013
« 1 » 2 3
  Strona 1 z 3 Następna strona