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

[SFML] Dziwne skoki FPS

Ostatnio zmodyfikowano 2012-10-15 21:57
Autor Wiadomość
Damianu
Temat założony przez niniejszego użytkownika
[SFML] Dziwne skoki FPS
» 2012-10-13 21:57:14
Witam, tak sobie teraz testowałem chodzenie w grze,otóż nawet gdy wyłączę wszystkie moduły w grze(wtedy jest odciążona, samo chodzenie nie wykonuje jakichś specjalnych operacji prócz dodawania do zmienne) gra łapie jakieś dziwne skoki FPS co sekundę, mam włączony V-Sync i ograniczenie do 60FPS. Zrobiłem sobie logger który printuje do konsoli wiadomość gdy FPS przekroczy 100 lub spadnie poniżej 40, co powinno być niemożliwe, szczególnie w pierwszym przypadku.
Jednak wygląda to tak:
http://puu.sh/1euhH
Czego to może być wina?
C/C++
void cPlayer::update()
{
    sf::Mouse mouse;
    sf::Vector2i mousePos = mouse.getPosition( app );
    rotation =-( atan2( mousePos.x -( position.x - screen.x ), mousePos.y -( position.y - screen.y ) ) ) / 3.14 * 180 + 180;
    sf::Keyboard keyboard;
    if( keyboard.isKeyPressed( keyboard.W ) )
    {
        double speed = 150 * appClock.getElapsedTime().asSeconds(); //Szybkoœæ
        move( sf::Vector2i( sin( rotation * M_PI / 180 ) * speed, - cos( rotation * M_PI / 180 ) * speed ) );
        screen.move( sf::Vector2i( sin( rotation * M_PI / 180 ) * speed, - cos( rotation * M_PI / 180 ) * speed ) );
    }
    if( keyboard.isKeyPressed( keyboard.S ) )
    {
        double speed = 1.5; //Szybkoœæ chodzenia do ty³u
        move( sf::Vector2i( - sin( rotation * M_PI / 180 ) * speed, cos( rotation * M_PI / 180 ) * speed ) );
        screen.move( sf::Vector2i( - sin( rotation * M_PI / 180 ) * speed, cos( rotation * M_PI / 180 ) * speed ) );
    }
    appClock.restart();
}
Kod odpowiadający za chodzenie.
C/C++
void cEntity::draw()
{
    sf::Sprite spr;
    spr.setOrigin( originX, originY );
    spr.setTexture( eTextures.textures[ textureID ] );
    spr.setPosition( position.x - screen.x, position.y - screen.y );
    spr.setRotation( rotation );
    app.draw( spr );
}
Wyświetlanie postaci.
P-66785
DejaVu
» 2012-10-14 22:58:11
Może źle obsługujesz kolejkę komunikatów?
P-66845
DejaVu
» 2012-10-15 21:57:26
C/C++
appClock.restart();
Mam wrażenie, że tu może być jakiś haczyk. Resetowanie timera raczej nie jest dobrym pomysłem jeżeli chcesz zachować względną płynność gry. Raz klatka może się renderować 200ms, a raz 1ms (bo np. jakiś algorytm się nie wykona).
P-66905
« 1 »
  Strona 1 z 1