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

[SFML] Wydajność

Ostatnio zmodyfikowano 2011-11-12 21:35
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
[SFML] Wydajność
» 2011-11-12 10:33:43
Pozwoliłem sobie nagrać dwa krótkie filmiki ukazujące czarną stronę SFML oraz uiściłem kody poniżej.

Wolno: http://www.youtube.com/watch?v=yc2zby7ELWQ
C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
    sf::Shape rama[ 138 ];
   
    sf::Shape waz = sf::Shape::Rectangle( 0, 0, 13, 13, sf::Color::Green, 1, sf::Color::White );
    waz.SetPosition( 100, 100 );
   
    int x = 0;
    int y = 0;
    int stop = 1; //Ino do sleep
   
    for( int i = 0; i < 138; i++ )
    {
        rama[ i ] = sf::Shape::Rectangle( 0, 0, 13, 13, sf::Color::Black, 1, sf::Color::White );
        rama[ i ].SetPosition( 3 + 20 * x, 3 + 20 * y );
        if( i < 39 ) ++x;
       
        else if( i == 39 ) x = i;
       
        if( i >= 39 && i < 69 ) ++y;
       
        else if( i == 69 ) y = 29;
       
        if( i >= 69 && i < 109 ) x--;
       
        else if( i == 109 ) x = 0;
       
        if( i >= 109 && i < 138 ) --y;
       
    }
   
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) );
       
        waz.Move( 1, 0 );
       
       
        oknoAplikacji.Clear( sf::Color( 0, 0, 0 ) );
        for( int i = 0; i < 138; i++ )
        {
            oknoAplikacji.Draw( rama[ i ] );
        }
        oknoAplikacji.Draw( waz );
        oknoAplikacji.Display();
       
        if( stop )
        {
            sf::Sleep( 5 );
            stop = 0;
        }
       
    }
    return 0;
}

Szybciej: http://www.youtube.com/watch?v=vqykcZxr4mc
C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Kurs SFML - http://cpp0x.pl" );
    sf::Shape rama[ 138 ];
   
    sf::Shape waz = sf::Shape::Rectangle( 0, 0, 13, 13, sf::Color::Green, 1, sf::Color::White );
    waz.SetPosition( 100, 100 );
   
    int x = 0;
    int y = 0;
    int stop = 1; //Ino do sleep
   
    for( int i = 0; i < 138; i++ )
    {
        rama[ i ] = sf::Shape::Rectangle( 0, 0, 13, 13, sf::Color::Black, 1, sf::Color::White );
        rama[ i ].SetPosition( 3 + 20 * x, 3 + 20 * y );
        if( i < 39 ) ++x;
       
        else if( i == 39 ) x = i;
       
        if( i >= 39 && i < 69 ) ++y;
       
        else if( i == 69 ) y = 29;
       
        if( i >= 69 && i < 109 ) x--;
       
        else if( i == 109 ) x = 0;
       
        if( i >= 109 && i < 138 ) --y;
       
    }
   
    while( oknoAplikacji.IsOpened() )
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.GetEvent( zdarzenie ) );
       
        waz.Move( 1, 0 );
       
       
        oknoAplikacji.Clear( sf::Color( 0, 0, 0 ) );
        /*for(int i = 0 ; i < 138 ; i++) //KOMENTARZRZRZRZ
        {
        oknoAplikacji.Draw(rama[i]);
        }*/
        oknoAplikacji.Draw( waz );
        oknoAplikacji.Display();
       
        if( stop )
        {
            sf::Sleep( 5 );
            stop = 0;
        }
       
    }
    return 0;
}

ps czarną stronę albo nieporadność programisty ;p
P-43847
malan
» 2011-11-12 10:36:58
Ooo ludzie...
P-43848
diego997
Temat założony przez niniejszego użytkownika
» 2011-11-12 10:38:16
Chciałem się dowiedzeić czy to ja robię błąd czy tak ma być i z tym trzeba żyć ;p?
P-43849
SeaMonster131
» 2011-11-12 10:40:54
Ja bym tam walnął 4 paski z tymi klockami, niż żeby tak się bawić ;p Szybciej by było. I przeczytaj timerach... ;p
P-43850
diego997
Temat założony przez niniejszego użytkownika
» 2011-11-12 10:43:38
Niestety to tak musi być ;p A co mi te timery dadzą ?
P-43851
malan
» 2011-11-12 10:43:51
P-43852
diego997
Temat założony przez niniejszego użytkownika
» 2011-11-12 10:47:34
Albo krótko dało by się to napisać tak aby ten pierwszy chodził tak szybko jak drugi przy zachowaniu tych kwadracików ?
P-43854
SeaMonster131
» 2011-11-12 11:07:28
Zwiększ jego prędkość. ALE - jeżeli inny komp np jest szybszy niż Twój, to ten kwadracik będzie poruszał się jeszcze szybciej, a jeżeli inny komp jest wolnyyy, to kwadrat też będzie wolno chodził. I dlatego trzeba tutaj zastosować timer, żeby na każdym kompie była podobna prędkość.
P-43856
« 1 » 2
  Strona 1 z 2 Następna strona