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

[SFML 2.1] SFML wolno chodzi

Ostatnio zmodyfikowano 2013-08-31 13:49
Autor Wiadomość
Natoito
Temat założony przez niniejszego użytkownika
[SFML 2.1] SFML wolno chodzi
» 2013-08-31 10:38:16
a więc przechodzę z 1.6 na 2.1 i zrobiłem sobie prostą aplikację żeby szybko nauczyć się obsługi nowszej wersji i nie chodzi ona płynnie, sprite wyraźnie przeskakuje zamiast przesuwać się płynnie:

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

int main()
{
    // textury
    sf::Texture T1;
    T1.loadFromFile( "tło.jpg" );
    sf::Texture T2;
    T2.loadFromFile( "1.png" );
   
    // sprity
    sf::Sprite S1( T1 );
    sf::Sprite S2( T2 );
    sf::Sprite S3( T2 );
   
    S1.setPosition( 0, 0 );
    S2.setPosition( 200, 200 );
   
    // główne okno
    sf::RenderWindow Window( sf::VideoMode( S1.getTexture()->getSize().x, S1.getTexture()->getSize().y, 32 ), "Próby" );
   
   
    Window.setFramerateLimit( 60 ); // nie ważne czy ustalę limit czy nie i tak nie chodzi płynnie a jak nie ma limity to sprite porusza się wolniej ii tez nie płynnie
   
    double dl, suma = 0; // delta time i suma klatek
    unsigned short int i = 0; // ile klatek
   
    sf::Vector2i Mouse;
   
    const unsigned short int speed = 400; // stała prędkość
   
    sf::Clock FrameTime; // zegar z czasem klatki
    FrameTime.restart();
   
    while( Window.isOpen() )
    {
        // licznik klatek
        dl = FrameTime.getElapsedTime().asSeconds();
        suma += dl;
        if( suma >= 1 )
        {
            std::cout << i << std::endl;
            suma = 0;
            i = 0;
        }
        FrameTime.restart();
       
        Window.draw( S1 );
       
        Mouse = sf::Mouse::getPosition( Window );
       
        sf::Event eventw; // eventy
       
       
       
        // warunek, żeby pętla nie wykonywała kilku zmian pozycji sprita
        if( Window.pollEvent( eventw ) )
        {
            if( eventw.type == sf::Event::Closed )
                 Window.close();
           
            if(( eventw.type == sf::Event::KeyPressed ) &&( eventw.key.code == sf::Keyboard::Down ) )
                 S2.move( 0, speed * dl );
           
            if(( eventw.type == sf::Event::KeyPressed ) &&( eventw.key.code == sf::Keyboard::Up ) )
                 S2.move( 0, speed * - dl );
           
            if(( eventw.type == sf::Event::KeyPressed ) &&( eventw.key.code == sf::Keyboard::Left ) )
            //S2.move( speed * -dl, 0 );
                 S2.setPosition( S2.getPosition().x -( speed * dl ), S2.getPosition().y );
           
            if(( eventw.type == sf::Event::KeyPressed ) &&( eventw.key.code == sf::Keyboard::Right ) )
            //S2.move( speed * dl, 0 );
                 S2.setPosition( S2.getPosition().x +( speed * dl ), S2.getPosition().y );
           
        }
       
        Window.draw( S2 );
       
        sf::Vector2f Dot = S2.getInverseTransform().transformPoint(( sf::Vector2f ) Mouse ); // położenie myszki względem sprita
       
        // czy myszka nad spritem
        if( Dot.x >= 0 && Dot.y >= 0 && Dot.x <= S2.getTextureRect().width && Dot.y <= S2.getTextureRect().height )
        if( sf::Image( T2.copyToImage() ).getPixel( Dot.x, Dot.y ).a != 0 ) // czy alpha == 0
        {
            S3.setPosition( Mouse.x -( S3.getTexture()->getSize().x / 2 ), Mouse.y - 20 ); // ustawianie pozycji sprita
            Window.draw( S3 );
        }
       
        Window.display();
        i++;
    }
    return 0;
}

tak więc nawet taki prosty kod nie chodzi płynnie, może źle skonfigurowałem VS 2010
P-91315
pekfos
» 2013-08-31 13:11:03
Nie używaj zdarzeń do chodzenia.
P-91324
Natoito
Temat założony przez niniejszego użytkownika
» 2013-08-31 13:49:55
eh, no tak przecież, kompletnie o tym zapomniałem, już zamieniłem na bezpośredni dostęp do klawiatury, dziękuję Ci

temat do zamknięcia
P-91328
« 1 »
  Strona 1 z 1