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#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; 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#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; 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 ) ); oknoAplikacji.Draw( waz ); oknoAplikacji.Display(); if( stop ) { sf::Sleep( 5 ); stop = 0; } } return 0; }
ps czarną stronę albo nieporadność programisty ;p |
|
malan |
» 2011-11-12 10:36:58 Ooo ludzie... |
|
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? |
|
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 |
|
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ą ? |
|
malan |
» 2011-11-12 10:43:51 |
|
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 ? |
|
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ść. |
|
« 1 » 2 |