Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
ich bin gerade dabei ein einfaches 2D rpg Spiel zu programmieren.
Ich möchte dabei die Animationsgeschwindigkeit einer Laufanimation diese ich aus einem Sprite für einen
Character habe, kontrollieren.
Hier habe ich einfach die Funktion TextureRect benutzt, um eine Laufanimation zu erstellen.
Nur das ganze geht viel zu schnell. Dann habe ich mir gedacht, könnte ich doch einfach dort
eine Schleife rein setzen, die einen Countdown runter zählt. Funktioniert leider auch nicht
richtig, es "laggt" ziemlich, außerdem wäre das sowie so eine sehr unschöne Methode, besonders
weil dann die Animation auf anderen PC`S, auch anders schnell laufen. Wie könnte ich, eine
"Animationsgeschwindigkeit" setzen, die auf allen Systemen gleich schnell laufen ?
Rein Theoretisch sollte das ja irgendwie mit sf::Clock/Time funktionieren oder ?
Für Tipps wäre ich dankbar.
lg, repac3r
Edit: Sry, aber die Formatierung will irgendwie nicht, egal wie oft ich es zurecht setze...
Mit einer Clock bist du schon auf dem richtigen Weg, grundsätzlich willst du ja einen festen Abstand zwischen den Phasenwechseln.
Das heißt, du gibst vor, nach was für einer Zeitspanne gewechselt wird und sobald eine Zeitvariable diese Zeit überschreitet wird gewechselt.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.
Du erstellst eine Variable, der du jedes Frame die Zeit hinzuaddierst, die im letzten Frame vergangen ist.
Wenn eine bestimmte Zeit erreicht ist versetzt du das Rechteck auf der Textur und setzt die Variable auf 0.
Ich kann dir später auch ein Code-Beispiel geben, ich bin ar gerade nicht am PC.
publicvoid Move()
{
if ((DateTime.Now >= _nexttime) && (_moving ==true))
{
//Wenn die Zielzeit erreicht wurde, wird auf das nächste Bitmap geschaltet
_animindex++;
CalcNewPos();
if (_animindex == _framecount)
{
_animindex =0;
_moving =false;
}
_nexttime = DateTime.Now.AddMilliseconds(_animdelay);
}
}
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »LeBusch« (29.12.2013, 20:48)
Du erstellst eine Variable, der du jedes Frame die Zeit hinzuaddierst, die im letzten Frame vergangen ist.
Würde ich dringend von abraten. Das ist numerisch instabil und außerdem überhaupt gar nicht notwendig, wenn man doch auch mit der verstrichenen Gesamtzeit arbeiten kann statt immer Deltas aufzuaddieren.
Okay ich habe das jetzt hinbekommen. Habe einfach eine Clock benutzt und immer die bereits abgelaufene Zeit mit einer Zählerschleife heruntergezählt. Funktioniert jetzt soweit, danke für euer Hilfe.
Du erstellst eine Variable, der du jedes Frame die Zeit hinzuaddierst, die im letzten Frame vergangen ist.
Würde ich dringend von abraten. Das ist numerisch instabil und außerdem überhaupt gar nicht notwendig, wenn man doch auch mit der verstrichenen Gesamtzeit arbeiten kann statt immer Deltas aufzuaddieren.