ksry Temat założony przez niniejszego użytkownika |
[SFML] ruch postaci i zmiana texturki » 2012-04-26 21:19:41 Witam. Korzystam z SFML 2.0 i mam pewien problem. Mianowicie chciałbym zrobić, aby podczas ruchu wraz ze zmianą pozycji przechodziły klatki tej postaci. Zastanawia mnie czy zrobić to za pomocą .move(), czy może też stworzyć własną funkcję i operować na .setPosition(). Czy używać do tego getElapsedTime, czy może jakichś innych metod. Byłbym wdzięczny gdybyście poparli swoje wypowiedzi przykładami |
|
fensz |
» 2012-04-26 22:34:59 U mnie jest to tak, że jeżeli idę, animacja działa, jeżeli nie to ją stopuję if( App.GetInput().IsKeyDown( sf::Key::A ) || App.GetInput().IsKeyDown( sf::Key::D ) || App.GetInput().IsKeyDown( sf::Key::W ) || App.GetInput().IsKeyDown( sf::Key::S ) ) { Andrzejanim.Play(); } else { Andrzejanim.Stop(); } if( App.GetInput().IsKeyDown( sf::Key::A ) ) Andrzejanim.Move( - speed * ElapsedTime, 0 ), Andrzejanim.SetRotation( 90 ), View.Move( - speed * ElapsedTime, 0 );
if( App.GetInput().IsKeyDown( sf::Key::D ) ) Andrzejanim.Move( speed * ElapsedTime, 0 ), Andrzejanim.SetRotation( - 90 ), View.Move( + speed * ElapsedTime, 0 );
if( App.GetInput().IsKeyDown( sf::Key::W ) ) Andrzejanim.Move( 0, - speed * ElapsedTime ), Andrzejanim.SetRotation( 360 ), View.Move( 0, - speed * ElapsedTime );
if( App.GetInput().IsKeyDown( sf::Key::S ) ) Andrzejanim.Move( 0, speed * ElapsedTime ), Andrzejanim.SetRotation( 180 ), View.Move( 0, + speed * ElapsedTime );
taki przykładzik |
|
ksry Temat założony przez niniejszego użytkownika |
» 2012-04-27 00:42:14 W moim przypadku sprowadza się to i tak do jednego, do tworzenia funkcji z przenoszeniem postaci. Dlaczego? Bo u mnie postać przesuwa się w 4 strony (nie wiem jak u Ciebie), więc animacja dla każdej z nich musi być inna, co za tym idzie do funkcji z animacją trzeba przesłać argument który klawisz wciśnięto, aby odróżnić te animacje. No i idąc dalej musimy osobno sprawdzać klawisze, więc można tą funkcję z animacją umieścić w bloku z poruszaniem. Więc czemu nie wpakować do jednej funkcji...?
lub po prostu nie rozumiem Twojego przykładu mógłbyś mnie wesprzeć podglądem na tą funkcję animującą? |
|
fensz |
» 2012-04-27 08:40:38 zobacz, to ci Ci napisałem wcześniej (oczywiście z klasami animującymi) u mnie wygląda tak: if( App.GetInput().IsKeyDown( sf::Key::A ) || App.GetInput().IsKeyDown( sf::Key::D ) || App.GetInput().IsKeyDown( sf::Key::W ) || App.GetInput().IsKeyDown( sf::Key::S ) ) { Andrzejanim.Play(); } else { Andrzejanim.Stop(); } if( App.GetInput().IsKeyDown( sf::Key::A ) ) Andrzejanim.Move( - speed * ElapsedTime, 0 ), Andrzejanim.SetRotation( 90 ), View.Move( - speed * ElapsedTime, 0 );
if( App.GetInput().IsKeyDown( sf::Key::D ) ) Andrzejanim.Move( speed * ElapsedTime, 0 ), Andrzejanim.SetRotation( - 90 ), View.Move( + speed * ElapsedTime, 0 );
if( App.GetInput().IsKeyDown( sf::Key::W ) ) Andrzejanim.Move( 0, - speed * ElapsedTime ), Andrzejanim.SetRotation( 360 ), View.Move( 0, - speed * ElapsedTime );
if( App.GetInput().IsKeyDown( sf::Key::S ) ) Andrzejanim.Move( 0, speed * ElapsedTime ), Andrzejanim.SetRotation( 180 ), View.Move( 0, + speed * ElapsedTime );
Mój sprite jest na tej samej zasadzie co ten: http://iv.pl/images/36137991717513984512.pngI to powinieneś zrozumieć. Sprite animujący się, obraca się rotacją wokół własnej osi. Sądze jednak, że ty masz sprite podobnego do tego: http://iv.pl/images/55170543917485384173.jpgNie wiem jak u ciebie z klasą animacji, ale podpowiem, że może to wyglądać tak if( TWOJSPRITE jest w ruchu ) { TWOJSPRITE.Play(); } else TWOJSPRITE.Stop();
if( App.GetInput().IsKeyDown( sf::Key::Up ) ) TWOJSPRITE.Move( 0, - speed * ElapsedTime ), TWOJSPRITE.SetCurrentFrame( NUMERRAMKI );
|
|
ksry Temat założony przez niniejszego użytkownika |
» 2012-04-28 20:28:39 Coś napisanie takiej funkcji mi nie wychodzi. Bo użycie funkcji z taką animacją nie spowoduje jej działania "w trayu", najpierw nastąpi animacja, potem ruch. A nie obie rzeczy jednocześnie. Myślałem więc nad czymś jak javascriptowy setTimeout, gdzie zmieni animację, ruszy się o ułamek odległości ze zmiennej i tak aż do dojścia do celu. |
|
hincu |
» 2012-04-28 20:43:07 |
|
« 1 » |