[SFML 2.0] Krycie obrazka
Ostatnio zmodyfikowano 2014-07-11 12:23
Ehlert Temat założony przez niniejszego użytkownika |
[SFML 2.0] Krycie obrazka » 2014-07-10 21:39:09 Witam, jak mogę wywołać obrazek(zainicjować jego rysowanie) tak, aby pojawiał się stopniowo zwiększając swoje krycie? Domyślam się, że będzie tu użyta pętla for, ale nie wiem jakiej funkcji mogę użyć. |
|
Dragonit |
» 2014-07-10 21:41:53 yyy... chodzi ci o alpha blending ? |
|
Ehlert Temat założony przez niniejszego użytkownika |
» 2014-07-10 22:05:49 możliwe. Efekt w którym obrazka nie ma i pojawiając się po prostu zmniejsza swoją przezroczystość. |
|
pekfos |
» 2014-07-10 22:59:27 sf::Sprite::setColor(). Daje nawet większe możliwości, niż tylko ustawianie przezroczystości. |
|
Ehlert Temat założony przez niniejszego użytkownika |
» 2014-07-10 23:40:35 Mój Sprite to obrazek wczytany z pliku więc zastanawiam się w jaki sposób użyć na nim SetColor();. |
|
kubawal |
» 2014-07-11 09:36:39 Sprite sp;
Color c = Color::Transparent; const int STEPS = 50; for( int i = 0; i < STEPS; i++ ) { c.a += 255 / STEPS; sp.setColor( c ); win.draw( sp ); }
Można (a nawet powinno) się zmienić to na pętlę zmiennokrokową, ale myślę, że sobie sam z tym poradzisz. |
|
pekfos |
» 2014-07-11 11:44:38 for( int i = 0; i < STEPS; i++ ) { c.a += 255 / STEPS; sp.setColor( c ); win.draw( sp ); }
|
Co to ma robić? |
|
unkn9wn |
» 2014-07-11 12:23:28 Według mnie powinieneś to robić uwzględniając czas. Wczytujesz obraz do sprite'a, domyślnie kolor masz pełny i niech tak zostaje Przed pętlą okienka tworzysz zegar, którym będziesz liczył czas życia obrazka sf::Clock zegar; sf::Time czasZycia = sf::Time::Zero; sf::Time twojUstawionyCzas = sf::seconds( 5.f );
W pętli aktualizujesz jedynie kolor alpha (przezroczystość) obrazka uwzględniając czas od kiedy pokazał się obrazek dzielony przez czas przez który chcesz aby się rozjaśniał (ustawiony w zmiennej sf::Time twojUstawionyCzas = sf::seconds( 5.f ); powyżej) while( mWindow.isOpen() ) { timeSinceLastUpdate += clock.restart(); while( timeSinceLastUpdate > tickrate ) { timeSinceLastUpdate -= tickrate; czasZycia = zegar.getElapsedTime(); if( twojUstawionyCzas.asSeconds() > 0 && czasZycia.asSeconds() <= twojUstawionyCzas.asSeconds() ) obraz.setColor( sf::Color( 255, 255, 255, 255 *( czasZycia.asSeconds() / twojUstawionyCzas.asSeconds() ) ) ); else obraz.setColor( sf::Color( 255, 255, 255, 255 ) ); } mWindow.clear(); mWindow.draw( obraz ); mWindow.display(); } # dodałem else gdyż w pełni się nie "załadowywuje" obraz |
|
« 1 » |