使用Farseer Physics的起伏/滞后精灵动画

本文关键字:滞后 精灵 动画 Farseer Physics 使用 | 更新日期: 2023-09-27 18:25:42

所以我在制作的这个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);

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

使用Farseer Physics的起伏/滞后精灵动画

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

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

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

Body.ApplyForce();