身体没有随重力面朝下旋转

7
我有一个矩形物体,以45度角从大炮中射出。该物体也向上旋转了45度,并且我已经将质量设置在物体的前部。
物体升空很好,但是当物体回到地面时,它不会旋转。有没有办法让质量一侧先落下?
我的真实例子是:把带绳的网球扔到空中。目前,当重力生效时,绳子不会落在球后面。
这是我的“球”。
Body = BodyFactory.CreateRectangle(world, ConvertUnits.ToSimUnits(texture.Width), ConvertUnits.ToSimUnits(texture.Height),100f, postition, this);
Body.Mass = 1;
Body.LocalCenter = new Vector2(ConvertUnits.ToSimUnits(Texture.Width), ConvertUnits.ToSimUnits(Texture.Height / 2));
Body.UserData = this;
Body.BodyType = BodyType.Dynamic;
Body.CollisionCategories = Category.All;
Body.CollidesWith = Category.All;
Body.IgnoreGravity = false;
float ang = BarrelJoint.JointAngle;
Body.Rotation = ang;

然后我这样触发它:
Body.ApplyLinearImpulse(new Vector2((float)Math.Cos(ang) * 100, (float)Math.Sin(ang) * 100));

我猜测我可能忘记了某些设置或计算。

2
只有在有空气阻力的情况下,物体才会旋转。我猜您的模拟没有模拟大气层。 - phoog
@phoog 把它作为一个答案。 - Chris Pitman
你会如何在Farseer物理世界中模拟大气层? - Jastill
@Jastill 不好意思,我也不知道。你的解决方案看起来已经足够好了。 - phoog
1个回答

1

对于未来阅读此文的任何人,我已经解决了这个问题。

我意识到速度会以我想要旋转改变的类似方式发生变化。因此,我基于速度来进行旋转,重力下拉得越多,物体就会更多地转向向下。

在我的对象更新类中,我添加了以下内容(注意:可能存在错误的数学计算)

public override void Update(GameTime gameTime)
    {
        Vector2 velocity = Body.LinearVelocity;

        float radians = (float)(Math.Atan2(-velocity.X, velocity.Y) + Math.PI/2.0);

        Body.Rotation = radians;

        base.Update(gameTime);
    }

现在我们有了一个旋转的物体。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接