首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MouseJoint反应越来越少

MouseJoint反应越来越少
EN

Stack Overflow用户
提问于 2022-04-19 16:08:21
回答 1查看 67关注 0票数 0

仍然是新的火焰和forge2d -都是非常令人印象深刻的东西。

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

从这个示例- MouseJointSample中,我看到它确实可以拖动身体--但是经过多次onDragUpdateonDragEnd之后,我发现它对鼠标移动的反应越来越少。希望下面的gif动画能可视化这一点。

每当鼠标静止不动时,我就释放鼠标/触摸,并重新启动onDragUpdate/onDragEnd

你看到了吗,如果看到了,该怎么办。这既发生在ios模拟器上,也发生在Chrome浏览器上。

看起来mouseJoint从未被真正摧毁过,我可以让它对鼠标/触摸远离BodyComponent做出反应:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-20 11:08:13

我想我找到了bug,代码应该是:

代码语言:javascript
复制
  @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;
  }

而不是

代码语言:javascript
复制
  @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;
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71928016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档