bbcodepl Temat założony przez niniejszego użytkownika |
[SFML] Mulenie ekranu przy wyświetlaniu grafiki » 2013-08-06 21:06:04 Witam. Mam mały problem. Chce zrobić HUD do mojej gry, ale gdy punkty życia 'regenerują się', to pasek w HUD wygląda jak pasek ładowania gry. Raz idzie szybciej, raz wolniej zamiast iść płynnie w jednej prędkości. Nie wiem czy to kwestia FPS, czy wykonywanych funkcji no, ale przecież tego kodu nie jest tak dużo. Czy można jakoś ustawić FPS, albo coś w tym stylu? #include <SFML/Graphics.hpp> #include <string>
using namespace sf; using namespace std;
const int szerokoscOkna = 800, wysokoscOkna = 600, glebiaKolorow = 32, siatkaGry = 40; const int R = 100, G = 100, B = 100; const string tytulOkna = "Gra";
RenderWindow oknoAplikacji; Event zdarzenieAplikacji;
int maxHealth = 100; double currentHealth, procentHealth = currentHealth * maxHealth / 100, regHealth = 1;
int funkcjaHUD = 1; int hpHUDY, upHUDY, downHUDY; int hpSzerokosc;
void obliczStatystyki() { if( currentHealth < maxHealth ) currentHealth += regHealth; procentHealth =( int ) currentHealth * maxHealth / 100; hpSzerokosc = 200 *( int ) procentHealth / 100; } void rysujHUD() { Texture tHUD; tHUD.loadFromFile( "graphics/tileHUD.png" ); tHUD.setSmooth( false ); Sprite HUDslot; HUDslot.setTexture( tHUD ); HUDslot.setTextureRect( IntRect( 0, 0, 240, 20 ) ); Sprite hpHUD; hpHUD.setTexture( tHUD ); hpHUD.setTextureRect( IntRect( 3, 20, 200, 20 ) ); hpHUD.setPosition( 0, hpHUDY ); oknoAplikacji.draw( hpHUD ); hpHUD.setTextureRect( IntRect( 3, 40, hpSzerokosc, 20 ) ); hpHUD.setPosition( 0, hpHUDY ); oknoAplikacji.draw( hpHUD ); oknoAplikacji.draw( HUDslot ); }
int main() { oknoAplikacji.create( VideoMode( szerokoscOkna, wysokoscOkna, glebiaKolorow ), tytulOkna ); while( oknoAplikacji.isOpen() ) { while( oknoAplikacji.pollEvent( zdarzenieAplikacji ) ) { if( zdarzenieAplikacji.type == Event::Closed ) oknoAplikacji.close(); oknoAplikacji.clear( Color() ); obliczStatystyki(); rysujHUD(); oknoAplikacji.display(); } } }
|
|
MrPoxipol |
» 2013-08-06 21:10:07 Jak przy każdej klatce wczytujesz teksturę to się nie dziw. |
|
hincu |
» 2013-08-07 10:16:13 tekstury wczytuj na poczatku dzialania aplikacji... druga sprawa to ogranicz fps do 30 |
|
bbcodepl Temat założony przez niniejszego użytkownika |
» 2013-08-07 11:27:05 Tamto to wiem, mój błąd. A jak ograniczyć FPS? |
|
pekfos |
» 2013-08-07 12:01:59 setFramerateLimit(), ale to nie jest dobry pomysł. |
|
domin568 |
» 2013-08-07 12:14:47 Dlaczego nie dobry pomysł ? z tego co wiem to można też napisać #define FPS 60.0 |
|
pekfos |
» 2013-08-07 12:28:19 Ta metoda nie jest dokładna. Poza tym, takich rzeczy się nie robi. Nie ma żadnego sensu ograniczać fpsów, zwłaszcza, do tak niskich wartości. No, chyba, że piszesz pokaz slajdów, a nie grę. Jeśli koniecznie chcesz użyć tej metody, to limit 60-70 to minimum. |
|
MrPoxipol |
» 2013-08-07 18:54:29 Warto również włączyć synchronizacje pionową, oczywiście będzie działała jeśli karta graficzna na nią pozwala. Win.setVerticalSyncEnabled( true ); |
|
« 1 » 2 |