所以我在这个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
转换为显示单位。
答案 0 :(得分:2)
您在模拟世界中手动设置物理主体的位置。如果你正在初始化对象,这很好,但是,当模拟它是个坏主意时。
Farseer将处理背景中的碰撞。它通过对你世界的身体施加各种力量来做到这一点。移动它的位置时,你没有遵循物理引擎的规则,而是手动移动你的物体。
您要做的是使用力而不是手动移动身体。尝试玩:
Body.ApplyForce();