Po prostu nie wiem jak. Stworzyłem sobie już postać, którą poruszam WSADem, nałożyłem sprite
a, zrobiłem też animację podczas ruchu, ale nie wiem jak zrobić z tego animację.
w konstruktorze playera, stworzyłem sobie tablicę współrzędnych o które ma się poruszyć:
for (int i = 0; i < 30; i++)
{
rot += 3.14 / 32.0f;
ax[i] = 1.5*sin(rot);
bx[i] = -1.5*cos(rot);
//std::cout << i << " -> Rot: " << rot << " ax: " << ax[i] << " bx: " << bx[i] << std::endl;
}
rot = 0;
I zaś mam właśnie funkcję skok:
void Player::skok()
{
status = IDZ;
sf::Time t2 = anim_clock.getElapsedTime();
if (anim_clock.getElapsedTime()>sf::seconds(0.09f))
{
std::cout << t2.asSeconds() << std::endl;
sprite.move(ax[i], bx[i]);
anim_clock.restart();
i++;
if (i == 29) i = 0;
}
I nie wiem jak zrobić z tego animację, bo jak przyciskam spację, to w miarę płynnie, po prostu się przemieszcza. Ale no chyba rozumiecie o co chodzi, chcę żeby po wciśnięciu spacji, wykonał się cały zakres ruchów, tak jakbym 30 razy kliknął spację.
To cały kod:
Player.h: http://wklej.org/id/1724806/
Engine.h: http://wklej.org/id/1724810/
Game.h: http://wklej.org/id/1724811/
Player.cpp: http://wklej.org/id/1724814/
Engine.cpp: http://wklej.org/id/1724817/
Game.cpp: http://wklej.org/id/1724816/
main.cpp: http://wklej.org/id/1724815/
Jak coś to czas pobiera się:
anim_clock.getElapsedTime()
Bo jak dla mnie to co napisałem powinno działać. Tzn. jak widzicie odmierzam sobie 0.09s, czyli tyle czasu trwania ma moja klatka. I teraz jeśli umieściłbym to powiedzmy w takiej pętli:
for (int a = 0; a<30; a++){
sf::Time t2 = anim_clock.getElapsedTime();
if (anim_clock.getElapsedTime()>sf::seconds(0.09f))
{
std::cout << t2.asSeconds() << std::endl;
sprite.move(ax[i], bx[i]);
anim_clock.restart();
i++;
if (i == 29) i = 0;
}
}
To kod odpowiedzialny za poruszanie się mojej postaci podczas skoku powinien jak dla mnie wykonać się te '30' razy, ale wykonuje się tylko raz, dlaczego?