Тело не поворачивается лицом вниз под действием силы тяжести

У меня есть прямоугольное тело, которое стреляет из пушки под углом 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));

Я предполагаю, что есть какие-то настройки или расчеты, которые я забыл.


person Jastill    schedule 28.12.2012    source источник
comment
Тело будет вращаться, только если у вас есть сопротивление воздуха. Я полагаю, что ваша симуляция не моделирует атмосферу.   -  person phoog    schedule 28.12.2012
comment
@phoog сделай это ответом   -  person Chris Pitman    schedule 01.01.2013
comment
Как бы вы подошли к моделированию атмосферы в физическом мире ясновидящего?   -  person Jastill    schedule 02.01.2013
comment
@Джа все еще понятия не имею, извини. Ваше решение кажется достаточно хорошим.   -  person phoog    schedule 05.01.2013


Ответы (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);
    }

И та-да, у нас есть вращающийся объект.

person Jastill    schedule 03.01.2013