[C++][SFML] Animacja
Ostatnio zmodyfikowano 2015-01-03 16:47
Amedos Temat założony przez niniejszego użytkownika |
[C++][SFML] Animacja » 2015-01-01 20:59:37 Witam. W jaki sposób tworzy się animacje w SFML'u ? Mam arkusz sprite,no i wiem jak wybrać odpowiedniego sprite'a itd. 1. W pętli głównej program mam umieścić rysowanie tego sprite? Czy może jakiś wątek? 2. Co jaki czas ma zmieniać klatke? 3. Gdzie poczytać o fizyce w grach 2d?
|
|
lectre |
» 2015-01-01 21:17:49 Animacje możesz stworzyć poprzez setTexture(). Co jakiś odstęp czasu zmieniaj tekstury wedle uznania. Sam sprite i jego rysowanie się nie zmienia. A do stworzenia timera użyj sf::Clock i sf::Time. |
|
1aam2am1 |
» 2015-01-01 21:24:21 3. Zależy jaką gre tworzysz. Widok z góry, z boku. Platformówkę, itp... Morzesz stworzyć własną, albo skorzystać choćby z box2d |
|
Amedos Temat założony przez niniejszego użytkownika |
» 2015-01-01 21:28:17 |
|
RazzorFlame |
» 2015-01-03 13:39:29 1. W pętli głównej program mam umieścić rysowanie tego sprite? Czy może jakiś wątek? |
To już zależy od Ciebie, generalnie rysowanie spritów się nie zmienia. 2. Co jaki czas ma zmieniać klatke? |
To także zależy od Ciebie. Jeżeli chcesz by animacja, która ma np. 10 klatek wyświetliła się cała w 60 sekund to klatke zmieniasz co 6 sekund. Kiedy ja pisałem w SFML to robiłem np. 6 klatek animacji chodzenia w danym kierunku i przełączałem klatke co 1/6 sekundy tak by pełna animacja trwała całą sekundę. 3. Gdzie poczytać o fizyce w grach 2d? |
Sam temat fizyki jest dość skomplikowany. W fizyce jest dużo różnych pojęć. Głównym źródłem wiedzy powinno być dla Ciebie google.pl Możesz też skorzystać z Wikipedii, bo często są tam różne wzory (zazwyczaj na angielskiej wiki). Jeżeli nie chcesz się bawić sam z tymi wzorami (bo nie ma co się oszukiwać - jest to ciężka i czasochłonna robota) to skorzystaj np. z Box2D. Co do animacji to zadałeś mało precyzyjne pytania. Animacje możesz zrobić w ten sposób: a) Jeżeli Twoja animacja mieści się w jednej teksturze (klatki są np. poukładane po kolei w prawo) Używasz funkcji sf::Sprite::setTextureRect(sf::IntRect&);Dzięki niej przy rysowaniu spritów wyświetlony będzie tylko taki kawałek jaki podasz w argumencie. b) Jeżeli klatki Twojej animacji to oddzielne tekstury Używasz funkcji sf::Sprite::setTexture(sf::Texture&);Dzięki niej ustawisz określoną teksturę Spritowi. Ogólne informacje: Powinieneś używać powyższych funkcji wtedy gdy chcesz zmienić klatkę, przykładowo: double zmianaKlatki = 1 /( double )( 2 ); int aktualnaKlatka = 0; sf::Clock zegarAnimacji; sf::Sprite spriteDoWyswietlenia; sf::Texture zestawAnimacji; zestawAnimacji.loadFromFile( "animacja.png" ); spriteDoWyswietlenia.setTexture( zestawAnimacji );
while( warunek_glownej_petli ) { if( zegarAnimacji.getElapsedTime().asSeconds() >= zmianaKlatki ) { zegarAnimacji.restart(); if( klatkaAnimacji == 0 ) { klatkaAnimacji = 1; spriteDoWyswietlenia.setTextureRect( sf::IntRect( 40, 0, 80, 40 ); } else if( klatkaAnimacji == 1 ) { klatkaAnimacji = 0; spriteDoWyswietlenia.setTextureRect( sf::IntRect( 0, 0, 40, 40 ); } } }
|
|
NopeDotAvi |
» 2015-01-03 15:24:09 if( klatkaAnimacji == 1 ) klatkaAnimacji = 0; else if( klatkaAnimacji == 0 ) klatkaAnimacji = 1;
można zapisać klatkaAnimacji = !klatkaAnimacji; |
|
RazzorFlame |
» 2015-01-03 16:10:13 Niezłe spostrzeżenie :) W sumie to się nigdy nie zastanawiałem nad tym. |
|
kubawal |
» 2015-01-03 16:47:21 |
|
« 1 » |