[SFML]problem z animacja postaci
Ostatnio zmodyfikowano 2012-11-03 13:07
DanielSC Temat założony przez niniejszego użytkownika |
[SFML]problem z animacja postaci » 2012-11-01 10:29:19 Otóż chciałem zrobić animacji chodzacej postaci ale jest taki problem ze 1 z 3 srpajtow sie nie wyswietla a mianowice sprajt2 #include <SFML/Graphics.hpp> #include <cstdlib> #include <ctime> #include <iostream> using namespace std;
int main() { int punkty = 1; srand( time( NULL ) ); int polozeniex =( rand() & 400 ) + 1; int polozeniey =( rand() & 400 ) + 1; int dalej; sf::Clock zegar; double czas1 = 0.5; double czas3 = 0.7; double czas4 = 0.9; double czas2 = 0.9; double reset; reset = czas2; sf::RenderWindow oknoAplikacji( sf::VideoMode( 800, 600, 32 ), "Np" ); sf::Image obrazek1; sf::Image obrazek2; sf::Image obrazek3; sf::Image obrazek4; obrazek1.LoadFromFile( "ludek1.png" ); obrazek2.LoadFromFile( "ludek2.png" ); obrazek3.LoadFromFile( "ludek3.png" ); obrazek4.LoadFromFile( "ludek4.png" ); sf::Sprite sprajt1; sf::Sprite sprajt2; sf::Sprite sprajt3; sf::Sprite sprajt4; sprajt1.SetImage( obrazek1 ); sprajt1.SetPosition( 200, 200 ); sprajt1.SetScale( 1, 1 ); sprajt2.SetImage( obrazek2 ); sprajt2.SetPosition( 200, 200 ); sprajt2.SetScale( 1, 1 ); sprajt3.SetImage( obrazek3 ); sprajt3.SetPosition( 200, 200 ); sprajt3.SetScale( 1, 1 ); sprajt4.SetImage( obrazek4 ); sprajt4.SetPosition( 200, 200 ); sprajt4.SetScale( 1, 1 ); while( oknoAplikacji.IsOpened() ) { sf::Event zdarzenie; while( oknoAplikacji.GetEvent( zdarzenie ) ) { if( zdarzenie.Type == sf::Event::Closed ) oknoAplikacji.Close(); } const sf::Input & sterowanie = oknoAplikacji.GetInput(); if( zegar.GetElapsedTime() >= reset ) zegar.Reset(); if( sterowanie.IsKeyDown( sf::Key::Left ) ) { sprajt2.Move( - 0.1, 0.0 ); sprajt1.Move( - 0.1, 0.0 ); sprajt3.Move( - 0.1, 0.0 ); } if( sterowanie.IsKeyDown( sf::Key::Right ) ) { sprajt2.Move( 0.1, 0.0 ); sprajt1.Move( 0.1, 0.0 ); sprajt3.Move( 0.1, 0.0 ); } if( sterowanie.IsKeyDown( sf::Key::Up ) ) { sprajt2.Move( 0.0, - 0.1 ); sprajt1.Move( 0.0, - 0.1 ); sprajt3.Move( 0.0, - 0.1 ); } if( sterowanie.IsKeyDown( sf::Key::Down ) ) { sprajt2.Move( 0.0, 0.1 ); sprajt1.Move( 0.0, 0.1 ); sprajt3.Move( 0.0, 0.1 ); } oknoAplikacji.Clear( sf::Color::White ); if( zegar.GetElapsedTime() > czas4 ); oknoAplikacji.Draw( sprajt4 ); if( zegar.GetElapsedTime() >= czas1 ) oknoAplikacji.Draw( sprajt1 ); if( zegar.GetElapsedTime() >= czas3 ) oknoAplikacji.Draw( sprajt3 ); if( zegar.GetElapsedTime() >= czas2 ) oknoAplikacji.Draw( sprajt2 ); oknoAplikacji.Display(); } return 0; } |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2012-11-01 10:30:23 a i sprajta4 nie ma
|
|
Mrovqa |
» 2012-11-01 14:47:35 Umieszczaj kod w znacznikach [cpp][/cpp] Masz straszny burdel w tym kodzie. Ciężko idzie się w nim połapać. double czas1 = 0.5; double czas3 = 0.7; double czas4 = 0.9; double czas2 = 0.9; double reset; reset = czas2; Numerujesz czasy (zmienne) nie po kolei. Niepotrzebnie bawisz się w przesuwanie każdego sprajta po kolei... Rysujesz sprajt na sprajcie; może problem tkwi w tym, że aplikacja działa, ale obrazki są podobne i po prostu tego nie widzisz? |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2012-11-01 16:02:47 Obrazki różnia się od siebie a burdel związany jest z tym że od kilka dni temu zabrałem się za SFML i po prostu jak cos zapomne to dopisuje na koniec. |
|
diego997 |
» 2012-11-02 11:04:02 |
|
Admixior |
» 2012-11-02 17:04:26 A jak się ma wyświetlać sprajt nr 2 skoro double czas2 = 0.9; jest na tyle duży że wcześniej będzie nr 3. if( zegar.GetElapsedTime() > czas4 );
oknoAplikacji.Draw( sprajt4 );
if( zegar.GetElapsedTime() >= czas1 ) oknoAplikacji.Draw( sprajt1 );
if( zegar.GetElapsedTime() >= czas3 ) oknoAplikacji.Draw( sprajt3 );
if( zegar.GetElapsedTime() >= czas2 ) oknoAplikacji.Draw( sprajt2 );
używaj else if żeby nie nakładać chyba że tego chcesz. Znacznie lepszą praktyką byłby dzielenie switch(( int )( zegar.GetEapsedTime() / czas_unitowy_na_jeden_obrazek ) ) { case 1: break; case 2: } i oczywiście zerowanie zegara w odpowiednim miejscu i czasie |
|
DanielSC Temat założony przez niniejszego użytkownika |
» 2012-11-03 13:07:47 aha dzieki
|
|
« 1 » |