C# 使用Farseer Physics的起伏/拉格精灵动画

C# 使用Farseer Physics的起伏/拉格精灵动画,c#,monogame,physics-engine,farseer,C#,Monogame,Physics Engine,Farseer,所以我在我制作的2D平台中使用了farseer物理,但由于某些原因,它使动画起伏,令人恼火。我试过两种不同的雪碧。第一个有4帧,另一个有10帧。当使用farseer时,动画只是起伏的 下面是我为精灵创建主体的代码: public void CreateBody(World world, float density, Vector2 position, object userData = null) { //magic number; so player doesn't look sill

所以我在我制作的2D平台中使用了farseer物理,但由于某些原因,它使动画起伏,令人恼火。我试过两种不同的雪碧。第一个有4帧,另一个有10帧。当使用farseer时,动画只是起伏的

下面是我为精灵创建主体的代码:

public void CreateBody(World world, float density, Vector2 position, object userData = null)
{
    //magic number; so player doesn't look silly running into something he isn't touching because of a weapon-- CHANGE LATER
    _body = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(_attackForkFrames[0].Width * _scale.X - 20), ConvertUnits.ToSimUnits(_attackForkFrames[0].Height * _scale.Y - 2), density, ConvertUnits.ToSimUnits(position), userData);
    _body.BodyType = BodyType.Dynamic;
    _body.Restitution = 0f;
    _body.CollisionCategories = Category.All;//Category.Cat1;
    _body.CollidesWith = Category.All;//Category.Cat10;

...
以下是更新位置的代码:

_body.Position = new Vector2(_body.Position.X + ConvertUnits.ToSimUnits(_movementSpeed), _body.Position.Y);

我确实将
\u body.position
转换为显示单位。

您正在模拟世界中手动设置物理体的位置。如果您正在初始化对象,这是非常好的,但是,当模拟对象时,这是一个坏主意

例如,Farseer将处理背景中的碰撞。它通过对你们世界中的身体施加不同的力来做到这一点。当你移动它的位置时,你没有遵循你的物理引擎的规则,你是在世界上手动移动你的对象

你要做的是施加一个力,而不是手动移动你的身体。尝试玩:

Body.ApplyForce();

这是XNA还是MonoGame?以后请不要发布代码的图片。花点时间把它翻译到网站上。以后不要用
xna
来标记关于
monogame
的问题,因为前者是后者的一个分支,因此是不同的products@User52784246在这种情况下,我认为标记XNA和Monogame没有问题,因为这两种框架是相似的,所提供的代码可以用于或中的任何一个。它也可能值得考虑运动学与动力学体。