Erstmal fette Respektpunkte von mir
Ich hätte echt wenig Lust sowas zu machen (na gut ok wir bauen hier ein ein Vertikal-Shooter in Java xD).
Wenn du das in gerenderte Bilder packst, dann bitte bau einen Algorithmus ein der die Objetke mit einem schwarzen Rand versieht! (evtl mit Option das die Ränder kantig sind und nicht so rund).
Haha, das mit dem Rand dürfte kein Problem sein. Jensma hat schon ein Programm geschrieben, das nen weißen Rand macht, weil ers so nervig findet, wenn er das pixeln muss
So, also das Projekt ist nicht stehengeblieben, ich hab ab und zu immer mal wieder dran gearbeitet. Nur musste ich recht oft nochmal von vorn anfangen, teils, weil ich bestimmte Sachen nur ausprobiert habe, teils, weil ich irgendwann an einen Punkt geraten bin, wo ich gemerkt habe, dass das Konzept hier und da nicht wirklich gut klappt.
An so einem Punkt bin ich jetzt mehr oder weniger wieder :'D
Also ich habe mich für folgenden Aufbau entscheiden:
-Alles bleibt 2D, in 3D müsste ich mich mit Matrizen und Quaternionen rumquälen, darauf hab ich noch keine Lust
-ich arbeite mit Joints, die jeweils einen Winkel und einen Offset-Vektor haben. Dazu dann noch ein Verweis auf den Parent, und auf die Childs ( im Moment ein Array bis 10, mehr sollte ein Joint nicht haben müssen )
So, und wenn ich jetzt zu den Keyframes komme, wirds knifflig.
Im Prinzip haben die auch nur einen Winkel und einen Offset. Dazu jetzt noch eine Variable für die Zeit.
Eine Animation ist jetzt einfach nur eine Folge von Keyframes, hab ich hier jetzt mit einer Linked List gemacht.
Und jetzt kam ich ins grübeln, wie ich denn so eine Animation am besten auf mein Modell anwende. Im Prinzip kann ich einer Animation genau einen Joint zuweisen, auf welchen diese dann angewand wird. Aber um eine Animation des gesamten Modells zu machen, müsste ich für jeden Joint eine Animationskette machen, in denen ja aber alle Keyframes die selbe Zeit haben.
Ich weiß nicht, mir erscheint das etwas zu umständlich alles. Daher hatte ich überlegt, ob ich nicht einfach jedem Jonit eine Animation zuweise.
So hatte ichs vorher
So wäre meine jetzige Idee:
Allerdings erscheint mir das auch wieder sehr unflexibel, weil einem Joint genau die eine Animation gegeben wird.
Meine dritte Idee wäre es, die Animationen so ähnlich aufzubauen, wie die Jonits, also auch in einer Hierarchie. Dabei wäre der Baum exakt so aufgebaut wie das Modell, und die Animationen würde man an der selben Stelle finden wie die Joints. Dann könnte man eine komplette Animation genauso laden und speichern, wie die Joints.
Ach, ich bin insgesamt einfach etwas durcheinander, vielleicht seh ich den Wald auch vor lauter Bäumen nicht, und ich habs eigentlich schon, erkenns nur nicht oder so. Ich würd nur gern mal eine andere Meinung dazu hören.
Ich würde Variante 2 empfehlen (also das, was als "jetzige Idee" gekennzeichnet ist). Das dürfte am flexibelsten sein und ist sehr einfach zu verarbeiten. In jedem Frame gehst du einmal alle Joints durch, prüfst, zwischen welchen Keyframes du dich befindest und interpolierst. Fertig.
Variante 3 ist auch nicht schlecht, setzt aber voraus, dass du in jedem Keyframe für alle Joints Werte speicherst. Das ist unter Umständen nicht sooo schön. Insbesondere, wenn du zwei unterschiedlich lange Teilanimationen mischen willst (Beine des Charakters laufen in einem 900 ms Loop, während die Schlag-Animation, die gleichzeitig abläuft, alle 1200 ms geloopt wird.)
P.S.: Children, nicht Childs. Für den Fall, dass du den Code veröffentlichen willst.
Mhm, stimmt du hast recht.
Das hatte ich auch in Planung, dass ich zwei verschiedene Teil-Animationen aufeinanderlegen kann. Also man hat zum Beispiel eine Laufanimation, und legt darüber eine Animation, wie der Charakter schießt / schlägt etc. . Die Beine bewegen sich gleich, nur der Oberkörper wird anders animiert. Daher fällt die 3. Methode definitiv aus.
Gut, ich werds mit der 2. weiter machen, ich schätze wenn ich dann zum Skinning komme, werde ich nochmal nachfragen müssen, wobei das mit etwas Beeilung vielleicht schon auf der Nato sein wird
Und ja, das mit Childs / Children war nur ein kurzer Tippfehler, in meinem Code hab ich natürlcih Children stehn xD