仍然是新的火焰和forge2d -都是非常令人印象深刻的东西。
我刚刚了解到,您需要一个MouseJoint来移动(Body)组件,这样就不会在Forge2d/Box2d中处理物理问题了。
从这个示例- MouseJointSample中,我看到它确实可以拖动身体--但是经过多次onDragUpdate和onDragEnd之后,我发现它对鼠标移动的反应越来越少。希望下面的gif动画能可视化这一点。
每当鼠标静止不动时,我就释放鼠标/触摸,并重新启动onDragUpdate/onDragEnd。
你看到了吗,如果看到了,该怎么办。这既发生在ios模拟器上,也发生在Chrome浏览器上。

看起来mouseJoint从未被真正摧毁过,我可以让它对鼠标/触摸远离BodyComponent做出反应:
注意:我刚克隆了火焰(ba61779)

发布于 2022-04-20 11:08:13
我想我找到了bug,代码应该是:
@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;
}https://stackoverflow.com/questions/71928016
复制相似问题