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

[SFML 2.1] Błąd z wykonywaniem animacji

Ostatnio zmodyfikowano 2014-01-12 10:36
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[SFML 2.1] Błąd z wykonywaniem animacji
» 2014-01-10 21:07:25
Witam, postanowiłem napisać prosty program z wykorzystaniem animacji (mam zamiar kiedyś zrobić platformówkę). Animacja ma 6 klatek, jeżeli klikam prawą strzałkę to postać mi się porusza, ale przy najszerszej teksturze mi ją poprostu obcina : Błąd animacji. Z czego to wynika ? Tutaj mój kod, pokazujący jak poradziłem sobie z animacją :
C/C++
Hero::Hero() // ładuje do tablicy tekstur
{
    heroTexture[ 0 ].loadFromFile( "stoi_prawo.png" );
    heroTexture[ 1 ].loadFromFile( "stoi_lewo.png" );
    heroTexture[ 2 ].loadFromFile( "1.png" );
    heroTexture[ 3 ].loadFromFile( "2.png" );
    heroTexture[ 4 ].loadFromFile( "3.png" ); // kłopotliwa tekstura
    heroTexture[ 5 ].loadFromFile( "4.png" );
    heroTexture[ 6 ].loadFromFile( "5.png" );
    heroTexture[ 7 ].loadFromFile( "6.png" ); // kłopotliwa tekstura
    heroTexture[ 8 ].loadFromFile( "1lewo.png" );
    heroTexture[ 9 ].loadFromFile( "2lewo.png" );
    heroTexture[ 10 ].loadFromFile( "3lewo.png" );
    heroTexture[ 11 ].loadFromFile( "4lewo.png" );
    heroTexture[ 12 ].loadFromFile( "5lewo.png" );
    heroTexture[ 13 ].loadFromFile( "6lewo.png" );
   
    heroSprite.setTexture( heroTexture[ 0 ] );
    setPositionHero( sf::Vector2f( 0, 200 ) );
}

void Hero::animacjaChodu( int actualFPS, double frames )
{
    if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
    {
       
        static int klatka = 2; // klatka 0 i 1 są zarezerwowane dla postaci stojącej w lewo i w prawo
        if( klatka >= 8 )
        {
            klatka = 2;
        }
        static sf::Clock clock;
       
        double one = 1;
        double coIleNastepnaKlatka = one / frames;
       
        if( clock.getElapsedTime().asSeconds() * 3 > coIleNastepnaKlatka * klatka ) // jeżeli nie pomnoże tego przez 3 to animacja będzie bardzo, wolna (wiem że to złe rozwiązanie, ale narazie badam temat ;)
        {
            heroSprite.setTexture( heroTexture[ klatka ] ); // zmiana tekstury postaci
            heroSprite.move( sf::Vector2f( 15, 0 ) );
            //heroSprite.move(sf::Vector2f(20, 0));
            klatka++;
            clock.restart();
        }
    }
    else
    {
        heroSprite.setTexture( heroTexture[ 0 ] ); // domyślnie
    }
}
P-101801
MrPoxipol
» 2014-01-11 09:30:37
P-101820
RazzorFlame
» 2014-01-11 16:52:31
Zapewne gdzieś używasz setTextureRect.
P-101859
domin568
Temat założony przez niniejszego użytkownika
» 2014-01-12 10:36:46
Nigdzie w moim kodzie nie używam setTextureRect
P-101905
« 1 »
  Strona 1 z 1