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

SFML - animacja

Ostatnio zmodyfikowano 2010-12-06 16:33
Autor Wiadomość
Handy90
Temat założony przez niniejszego użytkownika
SFML - animacja
» 2010-12-05 08:35:26
Siemka,
wiecie może jak zrobić animacje mojego żołnierza. Mam 48 grafik na każdą pozycje przypada po 12(lewo, prawo, góra, dół). Nie chcę gotowego kodu tylko sposobu jak to zrobić, będę bardzo wdzięczny.
pozd.
P-24840
waxx
» 2010-12-05 10:56:01
najlepiej uloz kolejne grafiki w pasek i w odpowiednim czasie wycinaj z tekstury tylko tyle ile potrzeba aktualnie :)
P-24841
Handy90
Temat założony przez niniejszego użytkownika
» 2010-12-05 20:29:48
A może jakiś przykładzik bo SFML to moja pierwsza biblioteka graficzna i ciężko mi się w tym połapać. Jeszcze miałbym prośbę jak ktoś czai ten temat(SFML) niech do mnie napisze 10914428. pomoże mi zacząć przygodę:)
P-24853
waxx
» 2010-12-05 22:15:45
potrzebujesz jakiegos timera i gdy np minie zalozmy 100ms zmieniasz klatke czyli ustawiasz swojemu spritowoi inny subrect (Sprite.SetSubRect) tak aby obejmowal tylko nowa klatke animacji

P-24864
Proxym
» 2010-12-05 22:59:38
Na wiki SFML jest jak zrobić sobie animacje.
Proszę: http://sfml-dev.org/wiki/en/sources/animation
P-24867
Handy90
Temat założony przez niniejszego użytkownika
» 2010-12-06 10:53:13
Możesz mi pokazać jak to zrobić:
C/C++
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow App( sf::VideoMode( 800, 600, 32 ), "Okienko" );
   
    sf::Image Mapa, Soldier0, Soldier1, Soldier2, Soldier3;
    Mapa.LoadFromFile( "mapa.bmp" );
    Soldier0.LoadFromFile( "soldier0.bmp" );
    Soldier1.LoadFromFile( "soldier1.bmp" );
    Soldier2.LoadFromFile( "soldier2.bmp" );
    Soldier3.LoadFromFile( "soldier3.bmp" );
   
    sf::Sprite sprite( Mapa );
    sf::Sprite sprite0( Soldier0 );
    sf::Sprite sprite1( Soldier1 );
    sf::Sprite sprite2( Soldier2 );
    sf::Sprite sprite3( Soldier3 );
   
    while( App.IsOpened() )
    {
       
        sf::Event Event;
        while( App.GetEvent( Event ) )
        {
            if( Event.Type == sf::Event::Closed )
                 App.Close();
           
            if( App.GetInput().IsKeyDown( sf::Key::Left ) )
                 sprite3.Move( - 40, 0 );
            else if( App.GetInput().IsKeyDown( sf::Key::Right ) )
                 sprite2.Move( 40, 0 );
            else if( App.GetInput().IsKeyDown( sf::Key::Down ) )
                 sprite0.Move( 0, 40 );
            else if( App.GetInput().IsKeyDown( sf::Key::Up ) )
                 sprite1.Move( 0, - 40 );
           
        }
        App.Clear();
        App.Draw( sprite );
        App.Draw( sprite0 );
        App.Draw( sprite1 );
        App.Draw( sprite2 );
        App.Draw( sprite3 );
        App.Display();
    }
    return EXIT_SUCCESS;
}

Bo teraz mam tak, że jak nacisnę strzałkę w lewo to idzie mi grafika(sprite3) a jak w prawo to sprite2 a mi chodziło o to by to były klatki animacji a nie oddzielne grafiki.
P-24873
DejaVu
» 2010-12-06 16:33:30
C/C++
int iKlatka = 0;
while(...)
{
    switch( iKlatka )
    {
    case 1:
        App.Draw( sprite0 );
        break;
    case 2:
        App.Draw( sprite1 );
        break;
    case 3:
        App.Draw( sprite2 );
        break;
    case 4:
        App.Draw( sprite3 );
        break;
        default:
        App.Draw( sprite );
        break;
    } //switch
   
    iKlatka =( iKlatka + 1 ) % 5;
} //while
P-24887
« 1 »
  Strona 1 z 1