[SFML] Tworzenie sprite'a w funkcji
Ostatnio zmodyfikowano 2012-10-07 13:27
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: 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: 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? |
|
diego997 |
» 2012-10-06 18:03:39 Dziwnie to robisz, a probowales tak: void funkcja( sf::Sprite & spr ) { }
int main() { sf::Sprite spr; funkcja( spr ); }
|
|
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 :/
|
|
DejaVu |
» 2012-10-06 21:02:05 Coś takiego powinno Ci działać: 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. 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: 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. |
|
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.
|
|
« 1 » |