riddim
Ist öfter hier
- Registriert
- 3 Januar 2005
- Beiträge
- 601
TitanSeal schrieb:von euch kennt sich eh keiner mit animationen aus, oder?
immer diese herrablassenden aussagen

ne leider nicht aber wenn würd ich dir sofort helfen

grüssle
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Herzlich Willkommen!
Nach der Schließung von inDiablo.de wurden die Inhalte und eure Accounts in dieses Forum konvertiert. Ihr könnt euch hier mit eurem alten Account weiterhin einloggen, müsst euch dafür allerdings über die "Passwort vergessen" Funktion ein neues Passwort setzen lassen.
Solltet ihr keinen Zugriff mehr auf die mit eurem Account verknüpfte Emailadresse haben, so könnt ihr euch unter Angabe eures Accountnamens, eurer alten Emailadresse sowie eurer gewünschten neuen Emailadresse an einen Administrator wenden.
TitanSeal schrieb:von euch kennt sich eh keiner mit animationen aus, oder?
Es gibt zur Berechnung der Animationsdauern eine grundsätzliche Formel, die fast immer angewandt wird:
Fpa = {(256*FramesPerDirection)/[(AnimationSpeed*(Base+EFHR)/100)]}-1
Wie man hier sieht, wird der Wert zur Berechnung aufgerundet, obwohl dies bei Diablo II für gewöhnlich nie geschieht. Dies liegt ganz einfach daran, dass die obige Formel programmintern nicht verwendet wird. Im Programm läuft eine Animation folgendermaßen ab:
1) Zuerst werden der Counter-Endwert und der Counter-Anstiegswert nach folgenden Formeln berechnet:
Counter-Endwert = 256*FramesPerDirection
Counter-Anstiegswert = AnimationSpeed*(Base+EFHR)/100
2) Der Wert von FramesPerDirection gibt an, aus wie vielen unterschiedlichen Bildern eine Animation besteht. Welches Bild zu welchem Zeitpunkt angezeigt wird, hängt vom aktuellen Wert des Counters ab. Bei einem FramesPerDirection von 5, haben wir 5 verschiedene Bilder und einen Counter-Endwert von 1280.
Counter = 0000-0255 => Bild 0 wird dargestellt
Counter = 0256-0511 => Bild 1 wird dargestellt
Counter = 0512-0767 => Bild 2 wird dargestellt
Counter = 0768-1023 => Bild 3 wird dargestellt
Counter = 1023-1279 => Bild 4 wird dargestellt
Der Counter beginnt beim Wert 0, sodass der Counter-Endwert von 1280 nicht mehr in dieser Animation enthalten ist. Dieser Wert ist das Ende dieser Animation und zugleich der Anfang der neuen Animation.
3) Jetzt starten wir unsere Animation, welche Frame für Frame (öfters spricht man auch von Ticks) abläuft. Am Anfang eines jeden Ticks wird der Counter um den errechneten Counter-Anstiegswert erhöht und anschließend abgefragt, ob der Counter-Endwert schon erreicht oder überschritten wurde (dadurch kommt nun das aufrunden in der Formel zustande). Ist dies nicht der Fall, wird ein Bild der Animation dargestellt. Sollte der Counter-Endwert jedoch schon erreicht/überschritten sein, endet die Animation. Die neue Animation (es läuft immer eine ab, zum Beispiel hat auch das Stehen eine eigene Animation) beginnt nun bei eben jenem Tick.
Beispiel für den Ablauf einer Animation:
Wir gehen von einer Animation mit folgenden Werten aus:
FramesPerDirection = 5
AnimationSpeed = 256
Base = 100
EIAS = 0
Counter-Endwert = 256*FramesPerDirection = 1280
Counter-Anstiegswert = AnimationSpeed*(Base+EFHR)/100 = 256
Counter = 0000-0255 => Bild 0 wird dargestellt
Counter = 0256-0511 => Bild 1 wird dargestellt
Counter = 0512-0767 => Bild 2 wird dargestellt
Counter = 0768-1023 => Bild 3 wird dargestellt
Counter = 1023-1279 => Bild 4 wird dargestellt
Tick 1:
Counter wird erhöht, Wert liegt nun bei 256
Wert des Counters >=1280? nein => Animation wird fortgesetzt
Bild 1 wird dargestellt
Tick 2:
Counter wird erhöht, Wert liegt nun bei 512
Wert des Counters >=1280? nein => Animation wird fortgesetzt
Bild 2 wird dargestellt
Tick 3:
Counter wird erhöht, Wert liegt nun bei 768
Wert des Counters >=1280? nein => Animation wird fortgesetzt
Bild 3 wird dargestellt
Tick 4:
Counter wird erhöht, Wert liegt nun bei 1024
Wert des Counters >=1280? nein => Animation wird fortgesetzt
Bild 4 wird dargestellt
Tick 5:
Counter wird erhöht, Wert liegt nun bei 1280
Wert des Counters >=1280? ja => Animation wird beendet
Daten der nächsten Animation werden ermittelt, Counter-Endwert und Counter-Anstiegswert errechnet und die nächste Animation startet mit diesem Tick
Natürlich wird es die wenigsten interessieren, wie lang ihre Animation mit einem bestimmten Wert dauert, sondern man wird nach den breakpoints fragen. Diese lassen sich nun folgendermaßen berechnen:
Fpa = {(256*FramesPerDirection)/[(AnimationSpeed*(Base+EFHR)/100)]}-1
Durch Umwandeln der Formel erhalten wir:
EFHR = {(100*FramesPerDirection)/(Fpa+1)}-Base
Zuerst setzen wir die Werte unserer Charakterklasse (verwendete Waffengattung berücksichtigen) bzw Verwandlungsform ein, sodass EFHR als einzige Variable übrig bleibt. Für Fpa werden nun ganze Werte angefangen bei 1 aufwärts eingesetzt, bis das Ergebniss 0 beträgt. So erhalten wir die Menge an EFHR, die wir für einen bestimmten breakpoint benötigen.
EIAS = [120*IAS/(120+IAS)]
Auch diese Formel wird nun umgewandelt, sodass wir folgende erhalten:
IAS = [120*EIAS/(120-EIAS)]
Damit lässt sich nun berechnen, wie viel IAS wir für die zuvor berechneten breakpoints wirklich brauchen. Ich werde dies nun am Beispiel des Paladins mit einer sonstigen Waffe berechnen:
EFHR = {(100*FramesPerDirection)/(Fpa+1)}-Base
FHR = {120*EFHR/(120-EFHR)}
EFHR = {(100*5)/(1+1)}-50 = 200
FHR = {120*200/(120-200)} = -300 => nicht möglich
EFHR = {(100*5)/(2+1)}-50 = 117
FHR = {120*117/(120-117)} = 4680
EFHR = {(100*5)/(3+1)}-50 = 75
FHR = {120*75/(120-75)} = 200
EFHR = {(100*5)/(4+1)}-50 = 50
FHR = {120*50/(120-50)} = 86
EFHR = {(100*5)/(5+1)}-50 = 34
FHR = {120*34/(120-34)} = 48
EFHR = {(100*5)/(6+1)}-50 = 22
FHR = {120*22/(120-22)} = 27
EFHR = {(100*5)/(7+1)}-50 = 13
FHR = {120*13/(120-13)} = 15
EFHR = {(100*5)/(8+1)}-50 = 6
FHR = {120*6/(120-6)} = 7
EFHR = {(100*5)/(9+1)}-50 = 0
FHR = {120*0/(120-0)} = 0
das hatte ich auch schon vermutetsonne.am schrieb:"So brach das ganze System zusammen, das Imperium zerfiel, und ein langes verstocktes Schweigen breitete sich über eine Billion Hunger leidender Welten aus."
![]()
dann muss ich es wohl noch umschreiben. eigentlich schreib ich den thread hauptsächlich für mich, aber etwas wissen vermitteln schadet nie.Also ich hab leider auch nicht vielverstanden, vieleicht aknnst dus mehr an einem korreten Beispiel aufbauen (also die Formel) und dann gleich im anschluss die Breakpoints dazu berechnen.