Hallo liebe Community,
da ich aktuell mit meinem Latein am Ende bin, dachte ich, ich poste ein Stück Code, welches sich meiner Verständnis entzieht.
Konkret versuche ich zu verstehen, wie Metin2 die Bewegungen des Spielers errechnet. Hier was ich dazu hab:
- void CActorInstance::__AccumulationMovement(float fRot)
- {
- // NOTE - ÀÏ´ÜÀº WAIT·Î ¹Ì²ô·¯Áü ¹æÁö
- // ÃßÈÄ¿¡´Â RaceMotionData°¡ À̵¿µÇ´Â ¸ð¼ÇÀÎÁö¿¡ ´ëÇÑ Flag¸¦ °®°í ÀÖ°Ô²û ÇÑ´Ù. - [levites]
- if (CRaceMotionData::NAME_WAIT == __GetCurrentMotionIndex())
- return;
- D3DXMATRIX s_matRotationZ;
- D3DXMatrixRotationZ(&s_matRotationZ, D3DXToRadian(fRot));
- UpdateTransform(&s_matRotationZ, GetAverageSecondElapsed());
- AddMovement(s_matRotationZ._41, s_matRotationZ._42, s_matRotationZ._43);
- }
Warum sorgt die UpdateTransform Methode dafür, dass die Z-Achse (s_matRotationZ._43) sich nie aktualisiert?
Intern ruft diese Methode irgendwann
auf. Leider geht es dann nicht mehr weiter und ich hab keine Doku zu Methoden von Granny2 gefunden, kommentiert ist das auch nicht.
Das Ergebnis ist jedenfalls, dass die X und Y Achse aktualisiert wird (Spieler läuft ja rum, also logisch), die Z-Achse aber unberührt bleibt.
Wie würde man es hinbekommen, dass der Spieler sich "nach oben" bewegt?
Ich kann meine Hintergründe gerne auch verraten, ich versuche mich aktuell an einem Mount Fly System. Habe mir die vorhandenen Lösungen angesehen und diese erweitern das Vorhandene von YMIR nicht, sondern sie führen einfach eine Variable "m_fZExtra" ein und addieren sie in der "AddMovement..." Zeile zur Z-Achse.
Mein Ziel wäre aber ein Verständnis für diesen Prozess aufzubauen und mich da ranzutasten.
Danke für den Wissensaustausch im Voraus.
~Lead