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

[SFML]Płynność

Ostatnio zmodyfikowano 2012-08-18 13:56
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
[SFML]Płynność
» 2012-08-17 15:51:21
Cześć czy macie problem z płynnością gry np podczas poruszania obiektu nie porusza się on z taką samą prędkością tylko np przyspiesza lub spowalnia co jakiś czas? Główny kod wygląda tak:

C/C++
#include <iostream>
#include <conio.h>
#include <SFML\Graphics.hpp>


int main()
{
   
    sf::RenderWindow Window( sf::VideoMode( 800, 600, 32 ), "Window" );
   
    sf::Clock Time;
    float reset = 0;
    float gameTime = 50;
   
    while( Window.isOpen() )
    {
        sf::Event Event;
        reset += Time.getElapsedTime().asMilliseconds();
       
        while( Window.pollEvent( Event ) )
        {
           
        }
       
        while( reset > gameTime ) //UPDATE GRY
        {
           
            reset -= gameTime;
        }
       
        Window.clear();
       
        //RENDEROWANIE GRAFIKI
       
       
       
       
        Window.display();
       
    }
}
P-62751
akwes
» 2012-08-17 16:17:24
C/C++
while( reset > gameTime ) //UPDATE GRY
{
   
    reset -= gameTime;
}

To ma tworzyć real time loop ?
P-62756
diego997
Temat założony przez niniejszego użytkownika
» 2012-08-17 16:25:40
tak a poniżej renderowanie
P-62757
akwes
» 2012-08-17 16:29:13
No to masz powód. Zakomenuj tę pętlę i powiedz czy też Ci się tak dzieje?

Pamiętaj, że masz jeszcze coś takiego jak
GetFrameTime
P-62758
diego997
Temat założony przez niniejszego użytkownika
» 2012-08-17 16:51:53
Przeczytałem na jakiejś stronie że ta pętla jest po to żeby gra na każdym komputerze chodziła tak samo ewentualnie wolniej w przypadku słabszego komputera ale nigdy szybciej. Jeżeli to usunę tak jak mówisz to u mnie gra będzie chodzić zupełnie inaczej niż na innym komputerze. Wiesz o co chodzi ?
P-62760
m4tx
» 2012-08-17 16:58:15
Używanie czegoś takiego to głupota. Lepiej użyj time per frame albo timerów, jeśli chcesz, żeby gra działała tak samo na każdym komputerze, nawet słabszym.
P-62762
akwes
» 2012-08-17 16:58:30

Pamiętaj, że masz jeszcze coś takiego jak GetFrameTime

@m4tx, nie głupota. Taka pętla pozwala na wiele bardzo fajnych rzeczy, jeżeli jest dobrze zrobiona. Odtwarzając tylko start maszyny losującej oraz poczynania gracza, można odtworzyć każdą partię (LOL, starcraft, warcraft) albo oglądnąć filmiki z tego co robiliśmy jak w gta vice city
P-62763
diego997
Temat założony przez niniejszego użytkownika
» 2012-08-17 17:44:21
Moglibyście uruchomić ten kod i powiedzieć czy wam ten klocek też się dziwnie porusza ?

C/C++
#include <iostream>
#include <conio.h>
#include <SFML\Graphics.hpp>

using namespace std;

int main()
{
   
    sf::RenderWindow Window( sf::VideoMode( 800, 600, 32 ), "Window" );
    Window.setFramerateLimit( 60 );
   
   
    sf::Clock time;
   
    sf::RectangleShape Shape;
   
    Shape.setFillColor( sf::Color::Green );
    Shape.setSize( sf::Vector2f( 100, 100 ) );
    Shape.setPosition( 400, 400 );
   
    float reset = 0;
   
    while( Window.isOpen() )
    {
        sf::Event Event;
       
        reset += time.getElapsedTime().asMilliseconds();
        time.restart();
       
       
       
        while( Window.pollEvent( Event ) )
        {
           
        }
       
        while( reset > 10 )
        {
           
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
                 Shape.move( 5, 0 );
           
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
                 Shape.move( - 5, 0 );
           
            reset -= 10;
           
        }
       
        Window.clear();
        Window.draw( Shape );
       
        Window.display();
       
    }
   
   
   
}









EDIT: Chyba już wiem o co chodzi ( w sumie powinno to być oczywiste od początku ;p) trzeba chyba uwzględnić ile fps'ów zostało "zmarnowanych" i o tyle dalej przesunąć obiekt. Teraz widzę, że to nie jest uwzględnione w tej pętli.



EDIT: Kurde jak uda wam się zrobić idealne poruszanie bez przycinania to naprawdę szacunek. Wiecie co wydaje mi się, że w grach jest coś więcej jeszcze uwzględnione niż tylko różnica klatek między następnym a poprzednim obiegiem pętli. Wydaje mi się że jak się przytnie procesor to czas też staje w miejscu ;p A więc jakim cudem mimo wszystko w grach jest idealna płynność ? Czy obiekty po prostu poruszają się dostatecznie szybko że tego nie widać ?
P-62764
« 1 » 2 3
  Strona 1 z 3 Następna strona