MouseJoint 的反应越来越少

MouseJoint gets less and less reactive

对 flame 和 forge2d 仍然是新手 - 两者都非常令人印象深刻。

我刚了解到您需要一个 MouseJoint 来移动一个 (Body) 组件,这样您就不会弄乱 Forge2d/Box2d 中的物理学。

从这个 example - MouseJointSample 我看到它确实适用于拖动 body - 但在多个 onDragUpdateonDragEnd 之后我发现它变得越来越不活跃鼠标移动。希望下面的gif动画可以形象化。

每次鼠标静止不动,我就松开mouse/touch,然后重新onDragUpdate/onDragEnd

你看到这个了吗?如果是,该怎么办。这在 ios 模拟器和 Chrome 网络浏览器中都会发生。

看起来 mouseJoint 从未真正被破坏过,我可以让它对远离 Body 组件的 mouse/touch 作出反应:

注意:我刚刚git克隆了火焰(ba61779)

我想我发现了错误,代码应该是:

  @override
  bool onDragUpdate(int pointerId, DragUpdateInfo details) {
    final mouseJointDef = MouseJointDef()
      ..maxForce = 3000 * ball.body.mass * 10
      ..dampingRatio = 0.1
      ..frequencyHz = 5
      ..target.setFrom(ball.body.position)
      ..collideConnected = false
      ..bodyA = groundBody
      ..bodyB = ball.body;

    if (mouseJoint == null) {
      mouseJoint = MouseJoint(mouseJointDef);
      world.createJoint(mouseJoint!);
    }
    mouseJoint?.setTarget(details.eventPosition.game);
    return false;
  }

而不是

  @override
  bool onDragUpdate(int pointerId, DragUpdateInfo details) {
    final mouseJointDef = MouseJointDef()
      ..maxForce = 3000 * ball.body.mass * 10
      ..dampingRatio = 0.1
      ..frequencyHz = 5
      ..target.setFrom(ball.body.position)
      ..collideConnected = false
      ..bodyA = groundBody
      ..bodyB = ball.body;

    mouseJoint ??= MouseJoint(mouseJointDef);
    world.createJoint(mouseJoint!);

    mouseJoint?.setTarget(details.eventPosition.game);
    return false;
  }