MouseJoint 的反应越来越少
MouseJoint gets less and less reactive
对 flame 和 forge2d 仍然是新手 - 两者都非常令人印象深刻。
我刚了解到您需要一个 MouseJoint
来移动一个 (Body) 组件,这样您就不会弄乱 Forge2d/Box2d 中的物理学。
从这个 example - MouseJointSample 我看到它确实适用于拖动 body - 但在多个 onDragUpdate
和 onDragEnd
之后我发现它变得越来越不活跃鼠标移动。希望下面的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;
}
对 flame 和 forge2d 仍然是新手 - 两者都非常令人印象深刻。
我刚了解到您需要一个 MouseJoint
来移动一个 (Body) 组件,这样您就不会弄乱 Forge2d/Box2d 中的物理学。
从这个 example - MouseJointSample 我看到它确实适用于拖动 body - 但在多个 onDragUpdate
和 onDragEnd
之后我发现它变得越来越不活跃鼠标移动。希望下面的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;
}