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

[SFML] Problem z wyświetleniem wszystkich sprajtów z tablicy

Ostatnio zmodyfikowano 2012-05-06 20:26
Autor Wiadomość
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:
C/C++
#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____________________________________________________________
 
C/C++
for( i = 1; i <= 288; i++ )
P-56125
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.
P-56130
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:

C/C++
#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 );
    }
   
    //--------------------------------- główna pętla gry ---------------------------------//
    while( oknoAplikacji.IsOpened() )
    {
        //-----------------------EVENTY-----------------------|
        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.
P-56131
SeaMonster131
» 2012-05-06 17:16:21
To była tylko propozycja, skoro nie umiesz korzystać z for, to z tego nie korzystaj.
» Kurs C++ » Poziom 2Pętla for lekcja
P-56132
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 :)
P-56133
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ą:

C/C++
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ć.
P-56138
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.
C/C++
for( i2 = 0; i2 == 287; i2++ )
Skoro i2 to 0, to przecież i2 == 287 zwróci fałsz i pętla się nie wykona..
P-56142
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:

C/C++
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.
P-56143
« 1 » 2
  Strona 1 z 2 Następna strona