derzeit programmiere ich ein kleines 2D-Spiel basierend auf Sfml.
Mein Problem ist jetzt, dass ich möchte, dass ein Sprite genau
zu einer Kachel hoch oder runter wandert. Eine Kachel bzw. Ebene ist
64 Pixel hoch. Mit meinem bisherigen Code läuft er zwar bis zur nächsten Kachel aber das viel
zu schnell. Hier mal mein Code:
Code: Alles auswählen
void player::setLayerDown(sf::Time elapsedTime)
{
isLocking = true;
if(getCurrentLayer() < 5)
{
float nextLayer = mPlayer.getPosition().y + 64.f;
while(mPlayer.getPosition().y < nextLayer)
{
//std::cout << "pos: " << mPlayer.getPosition().y + (PlayerSpeed * elapsedTime.asSeconds()) << std::endl;
if(mPlayer.getPosition().y + (PlayerSpeed * elapsedTime.asSeconds()) > nextLayer)
mPlayer.setPosition(20.f, nextLayer);
else
mPlayer.move(0.f, PlayerSpeed * elapsedTime.asSeconds());
}
}
isLocking = false;
}
setPosition hingesetzt, wenn das alles nicht der Fall ist, läuft er jeden Schleifendurchgang PlayerSpeed + Vergangene Zeit. Jedoch sieht es im Spiel
so aus als würde er immer sofort zu seiner Zielposition hingesetzt werden.
Liegt es vielleicht daran, dass die Schleife viel zu schnell ist und der Renderer von Sfml da nicht hinter her kommt ?