使用Farseer Physics进行波动/拉格精灵动画

时间:2014-10-07 05:51:02

标签: c# monogame physics-engine farseer

所以我在这个2D平台游戏中使用的是更低级的物理,但是由于某些原因它会让动画起伏不定而且很刺激。我用两个不同的精灵尝试过它。第一帧有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);

我确实将_body.position转换为显示单位。

1 个答案:

答案 0 :(得分:2)

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

Farseer将处理背景中的碰撞。它通过对你世界的身体施加各种力量来做到这一点。移动它的位置时,你没有遵循物理引擎的规则,而是手动移动你的物体。

您要做的是使用力而不是手动移动身体。尝试玩:

Body.ApplyForce();