Dies scheint so, als ob Sie die Position und Drehung von Objekten im Laufe der Zeit ändern möchten. AFAIK sfml bietet diese Funktionalität nicht sofort an, aber es sollte ziemlich einfach und unkompliziert sein, sie selbst zu implementieren.
Ich habe einmal eine ähnliche Lösung für eine dreidimensionale Simulation erstellt, die sich jedoch gut in eine grafische 2D-Anwendung übersetzen lässt.
Zunächst haben Sie zwei Konzepte: das Manipulator
und das entsprechende ManipulatorManager
. Manipulator
ist eine abstrakte Basisklasse für alle Arten von Manipulationen eines bestimmten Objekts, beispielsweise eines Sprites. Manipuliert können alle Eigenschaften wie Position oder Drehung, Bewegung auf einem Pfad oder ähnliches sein. Das Manager
überwacht den Status der Manipulators
und aktualisiert sie bei jedem Frame.
Die Schnittstelle für den Manipulator sieht ungefähr so aus:
class Manipulator {
public:
Manipulator(float expiration_time) : expiration_time(expiration_time);
bool is_expired() { return expiration_time < 0.f; }
void update(float dt) { this->expiration_time -= dt; }
protected:
float expiration_time;
}
Eine Implementierung dieser Klasse ist die, SimpleLineManipulator
die die Position eines Sprites über einen bestimmten Zeitraum auf einer geraden Linie beeinflusst:
class SimpleLineManipulator {
SimpleLineManipulator(Sprite *spr, Vector2f begin, Vector2f end, float expiration_time);
...
private:
Sprite* sprite;
Vector2f begin, end;
float total_time; // initialized with expiration_time
}
Und so sieht die Aktualisierungsmethode aus (wo der größte Teil der Arbeit stattfindet):
void SimpleLineManipulator::update(float dt) {
Manipulator::update(dt);
Vector2f position = lerp(end, begin, total_time/expiration_time);
spr->SetPosition(position.x, position.y);
}
Jetzt müssen Sie nur noch die update()
Methode für jeden Frame aufrufen . Es sollte einfach sein, einen Rotationsmanipulator oder Manipulatoren zu implementieren, die auf einem Pfad arbeiten (eine Liste von Positionen). Sie können diese Manipulatoren jetzt auch kombinieren, um kombinierte Effekte zu erstellen.
Ich hoffe, ich konnte die Architektur klar umreißen. Fragen Sie nur :)