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

[SFML] Tworzenie sprite'a w funkcji

Ostatnio zmodyfikowano 2012-10-07 13:27
Autor Wiadomość
Zyper
Temat założony przez niniejszego użytkownika
[SFML] Tworzenie sprite'a w funkcji
» 2012-10-06 16:52:41
Witam!
Od jakiegoś czasu, głowię się z następującym problemem.

Chciałbym zrobić, żeby to:
C/C++
sf::Texture tex;
tex.loadFromFile( "test.png" );
sf::Sprite spr( tex );
spr.setPosition( playerPos.x, playerPos.y );
spr.setScale( 1, 1 );

...tworzyło się w funkcji.
Robię tak:
C/C++
sf::Sprite sprite() {
    sf::Texture tex;
    tex.loadFromFile( "test.png" );
    sf::Sprite spr( tex );
    spr.setPosition( playerPos.x, playerPos.y );
    spr.setScale( 1, 1 );
    return spr;
}
A potem robię np. tak:
sf::Sprite spr = sprite();
Jak i na inne sposoby, ale zawsze coś jest nie tak. Np. sprite, nie otrzymuje tekstury..
Proszę o pomoc, nie mam pojęcia jak to zrobić. Co robię źle?

P-66175
diego997
» 2012-10-06 18:03:39
Dziwnie to robisz, a probowales tak:

C/C++
void funkcja( sf::Sprite & spr )
{
    //Zawartosc....
}

int main()
{
    sf::Sprite spr;
    funkcja( spr );
}
P-66184
Zyper
Temat założony przez niniejszego użytkownika
» 2012-10-06 20:14:56
Nie próbowałem, dzięki za odpowiedź. Ale robiąc tak, tekstura nadal się nie ustawia.
Widać biały kwadrat...

Chciałem używać funkcji, bo jest wtedy mniejszy bałagan w kodzie. Widzę, że nie jest to takie łatwe z SFML :/


P-66205
DejaVu
» 2012-10-06 21:02:05
Coś takiego powinno Ci działać:
C/C++
sf::Sprite sprite()
{
    static sf::Texture tex;
    tex.loadFromFile( "test.png" );
    sf::Sprite spr( tex );
    spr.setPosition( playerPos.x, playerPos.y );
    spr.setScale( 1, 1 );
    return spr;
}
/edit:
Powinieneś jednak pomyśleć nad stworzeniem jakiegoś managera tekstur, np.
C/C++
sf::Texture & dajTeksture( const char * sNazwa )
{
    typedef std::map < std::string, sf::Texture > MTeksturyT;
    static MTeksturyT mTekstury;
    MTeksturyT::iterator itFound = mTekstury.find( sNazwa );
    if( itFound != mTekstury.end() )
         return itFound.second;
   
    mTekstury[ sNazwa ].loadFromFile( sNazwa );
    return mTekstury[ sNazwa ];
}
Wówczas będziesz nie będziesz co wyświetlenie ładował tekstury, przez co wszystko będzie działało szybko, a Twój kod wyglądałby tak:
C/C++
sf::Sprite sprite()
{
    sf::Sprite spr( dajTeksture( "test.png" ) );
    spr.setPosition( playerPos.x, playerPos.y );
    spr.setScale( 1, 1 );
    return spr;
}

PS. Kod pisany z palca, więc mogą wystąpić błędy kompilacji.
P-66220
Zyper
Temat założony przez niniejszego użytkownika
» 2012-10-07 13:27:34
Dzięki.
Działa :)


Co do tej wczytywarki tekstur, to nie.. dzięki :P Na razie nie mam takiego poziomu, żeby to sam napisać. A kodu od kogoś brać nie będę, póki sam nie rozumiem.

P-66272
« 1 »
  Strona 1 z 1