sinoo Temat założony przez niniejszego użytkownika |
[SFML] Problem z wyświetleniem wszystkich sprajtów z tablicy » 2012-05-06 16:24:43 Witam, Mam pewien problemik z sprajtami w tym kodzie: #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Moja Aplikacja" ); oknoAplikacji.UseVerticalSync( true ); sf::Image grassIMG; grassIMG.LoadFromFile( "grass.bmp" ); sf::Sprite tlo[ 287 ]; int i = 0; do { tlo[ i ].SetPosition( 50 * i, 50 * i ); i++; } while( i == 288 ); i = 0; do { tlo[ i ].SetImage( grassIMG ); i++; } while( i == 288 ); while( oknoAplikacji.IsOpened() ) { sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) oknoAplikacji.Close(); } oknoAplikacji.Clear( sf::Color( 255, 100, 100 ) ); int i2 = 0; do { oknoAplikacji.Draw( tlo[ i2 ] ); i2++; } while( i2 == 288 ); oknoAplikacji.Display(); } return 0; } Problem polega na tym, że po uruchomieniu powyższego programu wyświetla się jedynie jeden sprajt(wymiary to 50x50) a chciałbym wyświetlić ich 288, aby pokrywały w całości tło aplikacji jeden obok drugiego. Próbowałem już rozwiązać ten problem na wiele sposobów i żaden nie odniósł oczekiwanego skutku. ______ROZWIĄZANIE____________________________________________________________ for( i = 1; i <= 288; i++ )
|
|
SeaMonster131 |
» 2012-05-06 16:52:14 Po 1. wyjeżdżasz poza rozmiar tablicy, po drugie w pętli zerujesz sobie zmienną (int i2 = 0). Lepiej i szybciej jest skorzystać z pętli for. |
|
sinoo Temat założony przez niniejszego użytkownika |
» 2012-05-06 17:08:04 Skorzystałem z pętli for w ten sposób: #include <SFML/Graphics.hpp>
int main() { sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Moja Aplikacja" ); oknoAplikacji.UseVerticalSync( true ); sf::Image grassIMG; grassIMG.LoadFromFile( "grass.bmp" ); sf::Sprite tlo[ 287 ]; for( int i = 0; i == 287; i++ ) { tlo[ i ].SetPosition( 50 * i, 50 * i ); } for( int i = 0; i == 287; i++ ) { tlo[ i ].SetImage( grassIMG ); } while( oknoAplikacji.IsOpened() ) { sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) oknoAplikacji.Close(); } oknoAplikacji.Clear( sf::Color( 255, 100, 100 ) ); for( int i2 = 0; i2 == 287; i2++ ) { oknoAplikacji.Draw( tlo[ i2 ] ); } oknoAplikacji.Display(); } return 0; }
Nie zmieniło to nic poza tym, że nie wyświetla się teraz żaden sprajt. |
|
SeaMonster131 |
» 2012-05-06 17:16:21 To była tylko propozycja, skoro nie umiesz korzystać z for, to z tego nie korzystaj. Pętla for |
|
Stefek |
» 2012-05-06 17:17:16 for( int i2 = 0; i2 == 287; i2++ ) Powtórz sobie konstrukcje pętli for. @up Uprzedziłeś mnie :) |
|
sinoo Temat założony przez niniejszego użytkownika |
» 2012-05-06 17:36:56 Zamieniłem część kodu z pętlą for na tą: int i2; for( i2 = 0; i2 == 287; i2++ ) { oknoAplikacji.Draw( tlo[ i2 ] ); }
Ale problem się powtarza, a ja nie mam pojęcia jak sobie z nim poradzić. |
|
SeaMonster131 |
» 2012-05-06 17:58:33 Kompletnie nie masz pojęcia jak działa pętla for. W linku do kursu masz nawet przykłady. for( i2 = 0; i2 == 287; i2++ )
Skoro i2 to 0, to przecież i2 == 287 zwróci fałsz i pętla się nie wykona.. |
|
sinoo Temat założony przez niniejszego użytkownika |
» 2012-05-06 18:14:48 W kursie, do którego wysłałeś link jest taki przykład: int i; for( i = 1; i <= 10; i++ ) jedna_powtarzana_instrukcja;
Powyżej w kursie jest także opisane, że: I parametr oznacza wartość początkową, II parametr warunek kończący, a III licznik pętli. I powtarzasz tylko, że nie znam pętli for, a przecież wykonałem je dokładnie tak samo jak na przykładzie, w ten sposób: for( i2 = 0; i2 == 287; i2++ ) I parametr - wartość początkową, II parametr - warunek kończący, III - licznik pętli. |
|
« 1 » 2 |