Permalänk

XNA, animering

Jag håller på att göra ett spel men har fastnat lite på animationen för gubbens ben. (Gubben som jag använder nu är en test gubbe om ni undrar varför den är röd)
YouTube - Leg animation problem.avi

Det är mening att benet ska vridas från uppe sidan och inte nedre sidan av benet dessutom ska det inte gå snurra i ett varv som den gör. Har försökt att fixa det i mer än en vecka men kan inte komma på en lösning.

class Character : GameObject { public static Matrix[] meshLeg = new Matrix[3]; public static float[,] LegPosition = new float[3, 3]; public Character() { for (int i = 0; i >= 2; i += 1) { meshLeg[i] = new Matrix(); for (int j = 0; j >= 2; j += 1) { LegPosition[i, j] = 0; } meshLeg[i] = Matrix.CreateTranslation(new Vector3(0, -0.25f, -3.4f)) * Matrix.CreateRotationX(LegPosition[i, 0]) * Matrix.CreateTranslation(Position); } } public void UppdateMoveFoot() { LegPosition[0, 2] -= 0.25f; LegPosition[1, 2] -= 0.25f; LegPosition[2, 2] -= 0.05f; meshLeg[0] = Matrix.CreateTranslation(new Vector3(0.0f, -0.25f, -3.4f)) * Matrix.CreateTranslation(Position.X, Position.Y, Position.Z + LegPosition[0, 2]); meshLeg[1] = Matrix.CreateTranslation(new Vector3(0.0f, -0.25f, -3.4f)) * Matrix.CreateTranslation(Position.X, Position.Y, Position.Z + LegPosition[1, 2]); meshLeg[2] = Matrix.CreateTranslation(new Vector3(0.0f, -0.25f, -3.4f)) * Matrix.CreateRotationX(LegPosition[2, 2]) * Matrix.CreateTranslation(Position); } public void MoveFoot(Matrix[] meshWorlds) { ModelMesh mesh; for (int index = 0; index <= 1; index++) { mesh = model.Meshes[index]; foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.World = mesh.ParentBone.Transform * meshWorlds[index]; effect.Projection = Camera.CameraProjectionMatrix; effect.View = Camera.CameraViewMatrix; } mesh.Draw(); } mesh = model.Meshes[2]; foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.World = mesh.ParentBone.Transform * meshWorlds[2]; effect.Projection = Camera.CameraProjectionMatrix; effect.View = Camera.CameraViewMatrix; } mesh.Draw(); for (int index = 3; index < model.Meshes.Count; index++) { Matrix[] transforms = new Matrix[model.Bones.Count]; model.CopyAbsoluteBoneTransformsTo(transforms); mesh = model.Meshes[index]; foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.World = Matrix.CreateFromYawPitchRoll(Rotation.X, Rotation.Y, Rotation.Z) * Matrix.CreateScale(Scale) * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position); effect.Projection = Camera.CameraProjectionMatrix; effect.View = Camera.CameraViewMatrix; } mesh.Draw(); } } }

class GameObject { private Model _model = null; private Vector3 _Position = Vector3.Zero; private Vector3 _Rotation = Vector3.Zero; private float _scale = 1.0f; private Vector3 _Velocity = Vector3.Zero; private bool _Alive = false; public Model model { get{return _model;} set { _model = value; } } public Vector3 Position { get { return _Position; } set { _Position = value; } } public Vector3 Rotation { get { return _Rotation; } set { _Rotation = value; } } public Vector3 Velocity { get { return _Velocity; } set { _Velocity = value; } } public float Scale { get { return _scale; } set { _scale = value; } } public bool Alive { get { return _Alive; } set { _Alive = value; } } }

Permalänk
Medlem

När jag lärde mig XNA fuskade jag mycket ^^
Jag laddade hem och granskade koden mycket men ett exempel jag använde mig av var den här.

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40