Как позволить двум телам столкнуться в Farseer и передать импульс второму телу? - PullRequest
1 голос
/ 16 февраля 2012

У меня есть песочница с шайбой (круговое приспособление) и летучей мышью (управляемая движениями мыши пользователя).Если пользователь ударяет по шайбе, я хочу получить импульс, основанный на скорости движения мыши.Однако у меня есть проблемы:

  • В делегате столкновения, если я проверяю линейную скорость летучей мыши, она равна 0 | 0 или что-то совершенно случайное (кажется).
  • Если япросто дайте постоянный импульс шайбе, скорость движения летучей мыши не включена.
  • Я хочу применить импульс в точке соприкосновения двух тел, а не к центру шайбы.Есть ли способ доступа к координатам этой точки, если происходит столкновение?

Как правильно решить эту проблему?

1 Ответ

0 голосов
/ 17 февраля 2012

Понял это, посмотрев XNA Samples of Farseer. Вам нужно будет создать Joint, а точнее FixedMouseJoint:

oPlayerJoint = new FixedMouseJoint( this.oPlayerBat, this.oPlayerBat.Position )
{
  MaxForce = 1000f * this.oPlayerBat.Mass
};
this.oWorld.AddJoint( this.oPlayerJoint );

Тогда при обновлении игровой логики, примерно так:

MouseState oMouseState = Mouse.GetState();
Vector2 oMousePos = new Vector2(oMouseState.X - GAMEFIELD_WIDTH / 2f, oMouseState.Y - GAMEFIELD_HEIGHT / 2f);
// Make the bat follow the mouse.
this.oPlayerJoint.WorldAnchorB = oMousePos.ToPhysicsUnits();
...