Тело, не вращающееся, чтобы смотреть вниз с силой тяжести

У меня прямоугольное тело, которое запускается из канона в 45degree Энгл. Телом также вращают под 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));

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

7
nl ja de
Тело только вращалось бы, если у вас есть сопротивление воздуха. Я предполагаю ваше моделирование doesn' t моделируют атмосферу.
добавлено автор phoog, источник
@Jastill никакая идея, жаль. Ваше решение кажется достаточно хорошим.
добавлено автор phoog, источник
@phoog делают это ответом
добавлено автор Chris Pitman, источник
Как вы пошли бы о моделировании атмосферы в farseer мире физики?
добавлено автор Jastill, источник

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);
    }

И у ta da we есть вращающийся объект.

1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot