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

[SFML 2.0] Krycie obrazka

Ostatnio zmodyfikowano 2014-07-11 12:23
Autor Wiadomość
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ć.
P-113594
Dragonit
» 2014-07-10 21:41:53
yyy... chodzi ci o alpha blending ?
P-113595
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ść.
P-113597
pekfos
» 2014-07-10 22:59:27
sf::Sprite::setColor(). Daje nawet większe możliwości, niż tylko ustawianie przezroczystości.
P-113601
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();.
P-113607
kubawal
» 2014-07-11 09:36:39
C/C++
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.
P-113612
pekfos
» 2014-07-11 11:44:38
C/C++
for( int i = 0; i < STEPS; i++ )
{
    c.a += 255 / STEPS;
    sp.setColor( c );
    win.draw( sp );
}
Co to ma robić?
P-113617
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

C/C++
// czas życia obrazka na ekranie
sf::Clock zegar;
sf::Time czasZycia = sf::Time::Zero;
sf::Time twojUstawionyCzas = sf::seconds( 5.f ); // obraz będzie się rozjaśniał przez 5 sekund


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)

C/C++
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
P-113618
« 1 »
  Strona 1 z 1