[SFML] Dziwne skoki FPS
Ostatnio zmodyfikowano 2012-10-15 21:57
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/1euhHCzego to może być wina? 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(); 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; 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. 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. |
|
DejaVu |
» 2012-10-14 22:58:11 Może źle obsługujesz kolejkę komunikatów? |
|
DejaVu |
» 2012-10-15 21:57:26 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). |
|
« 1 » |