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

SFML - timer

Ostatnio zmodyfikowano 2011-04-27 14:21
Autor Wiadomość
Handy90
Temat założony przez niniejszego użytkownika
SFML - timer
» 2011-04-27 09:00:31
Siemka,
słuchajcie jak zrobić żeby po naciśnięciu strzałki np. w prawo postać przesunęła mi się o 32pix ale zrobiła to wolno przypuśćmy, że potrzebowała by 1s by to zrobić.
pozd.
P-32076
SeaMonster131
» 2011-04-27 14:08:50
< upss, SDL z SFML mi sie pomylił >
P-32080
DejaVu
» 2011-04-27 14:13:06
P-32081
WiecznyWem
» 2011-04-27 14:21:19
Do takiego zastosowania, najlepsze będzie liczyć przesunięcie, na podstawie delty. W klasie sf::RenderWindow, jest funkcja GetFrameTime(). Korzystając z niej, zabezpieczysz się przed tym, że aplikacja działa różnie na innych komputerach. Jedynym minusem jest to, że trzeba operować na "troszkę" większych liczbach.

Przykładowo:
C/C++
int speed = 500;
sf::Image img; img.Create( 50, 50, sf::Color::Red );
sf::Sprite foo( img ); foo.SetPosition( 150, 150 );
//w głównej pętli
if( /*ZASZŁO JAKIEŚ ZDARZENIE*/ ) {
    foo.Move( 0, Okno.GetFrameTime() * speed ); //pozycja Y foo będzie rosnąć
}
//Fajnie tu by było zrobić zdarzenie inputowe, albo KeyPressed, wtedy ładnie zobaczysz efekt;

Oczywiście, ten sposób nadaje się tylko do pewnego rodzaju zastosowań. Natomiast, aby zrobić coś, co ma się wykonywać co np. sekundę, można zrobić coś takiego:
C/C++
sf::Clock zegar;
sf::Image img; img.Create( 50, 50, sf::Color::Red );
sf::Sprite foo( img ); foo.SetPosition( 150, 150 );

//w głównej pętli
if( zegar.GetElapsedTime() >= 1 ) {
    zegar.Reset();
    foo.Move( 0, 32 );
}
Jak widzisz, są to proste rozwiązania.

//Pisałem całość z pamięci i nie sprawdzałem kodu.
P-32083
« 1 »
  Strona 1 z 1