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

[SFML] Mulenie ekranu przy wyświetlaniu grafiki

Ostatnio zmodyfikowano 2013-08-08 08:59
Autor Wiadomość
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?
C/C++
#include <SFML/Graphics.hpp>
#include <string>

using namespace sf;
using namespace std;

///####################################################################################
///GLOWNE USTAWIENIA APLIKACJI
const int szerokoscOkna = 800, wysokoscOkna = 600, glebiaKolorow = 32, siatkaGry = 40;
const int R = 100, G = 100, B = 100;
const string tytulOkna = "Gra";

///ZMIENNE SFML
RenderWindow oknoAplikacji;
Event zdarzenieAplikacji;

///ZMIENNE GLOBALNE (LICZBY)
///STATYSTYKI W GRZE
int maxHealth = 100;
double currentHealth, procentHealth = currentHealth * maxHealth / 100, regHealth = 1;

///HUD
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()
{
    ///LADOWANIE TILE SETA HUD'A EKRANOWEGO
    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()
{
    ///TWORZENIE OKNA GRY
    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();
        }
    } ///PETLA GRY
}
P-89641
MrPoxipol
» 2013-08-06 21:10:07
Jak przy każdej klatce wczytujesz teksturę to się nie dziw.
P-89643
hincu
» 2013-08-07 10:16:13
tekstury wczytuj na poczatku dzialania aplikacji... druga sprawa to ogranicz fps do 30
P-89658
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?
P-89662
pekfos
» 2013-08-07 12:01:59
setFramerateLimit(), ale to nie jest dobry pomysł.
P-89665
domin568
» 2013-08-07 12:14:47
Dlaczego nie dobry pomysł ? z tego co wiem to można też napisać #define FPS 60.0
P-89671
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.
P-89676
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 );
P-89703
« 1 » 2
  Strona 1 z 2 Następna strona