Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Box2D如何通过拉动车轮的一条边绕轴旋转车轮?_Java_Android_Box2d_Jbox2d - Fatal编程技术网

Java Box2D如何通过拉动车轮的一条边绕轴旋转车轮?

Java Box2D如何通过拉动车轮的一条边绕轴旋转车轮?,java,android,box2d,jbox2d,Java,Android,Box2d,Jbox2d,在本例中,我是Box2D JBox2d新手,我正在Android应用程序上创建一个控制盘菜单。 我想让用户选择一个菜单项和车轮应自动旋转到想要的部分。 轮体是动态的,通过其中心的旋转接头连接到静态锚 我使用的是车轮内用户轻触位置和车轮顶部静态车身之间的距离接头。 我的问题是关节的设置。我无法计算出长度/阻尼/频率的组合,因此我可以在最后以最小的振荡进行快速拉动。 此外,如果我选择了weel上方的一个元素,它们会停在正确的位置。但如果我在末端轻敲一个,关节不尊重我给它的0的长度,我最终得到以下结

在本例中,我是Box2D JBox2d新手,我正在Android应用程序上创建一个控制盘菜单。 我想让用户选择一个菜单项和车轮应自动旋转到想要的部分。 轮体是动态的,通过其中心的旋转接头连接到静态锚 我使用的是车轮内用户轻触位置和车轮顶部静态车身之间的距离接头。

我的问题是关节的设置。我无法计算出长度/阻尼/频率的组合,因此我可以在最后以最小的振荡进行快速拉动。 此外,如果我选择了weel上方的一个元素,它们会停在正确的位置。但如果我在末端轻敲一个,关节不尊重我给它的0的长度,我最终得到以下结果:

如果我使用长度为0,阻尼为1,频率为0,结果是完美的,但我没有动画:它会立即转到正确的位置

在iOS上,我使用UIKit Dynamics制作了相同的菜单,结果非常好:


提前感谢您的指导。

我认为基本问题在于您尝试使用的接头类型

距离关节假设两个连接点之间的距离是恒定的。通常,box2d关节的基本假设可以稍微改变这一规则,但仍然

尝试使用MouseJoint并记住:

当您创建鼠标点并将其附着到主体时,在创建鼠标点定义时,您可以指定一个目标,该目标在此特定时刻表示要将鼠标点再次指向的主体部分-它位于该主体内!。因此,在您的情况下,该目标应指示车轮的接触部分

在调用.createJoint后完成关节的创建时,目标表示希望将此主体中先前设置的目标移动到的位置,以便将车轮顶部的此锚定

因此,基本上,您应该使用类似以下代码在触摸时创建鼠标关节:

MouseJoint wheelJoint;
MouseJointDef mouseJointDef = new MouseJointDef();
mouseJointDef.bodyA = <something>;
mouseJointDef.bodyB = wheelBody;
mouseJointDef.target.set(0 + chosenWheelPositionOffsetX, 0 + chosenWheelPositionOffsetY);
mouseJointDef.target.addLocal(wheelCenterX, wheelCenterY);
mouseJointDef.dampingRatio = <chosen_value>;
mouseJointDef.frequencyHz = <chosen_value>;
mouseJointDef.maxForce = <chosen_value>;
wheelJoint = (MouseJoint) mWorld.createJoint(mouseJointDef);
调整视图,使其完全按照预期工作


我希望一切都清楚,如果有什么不清楚,请告诉我。另外,如果更换接头类型有助于解决您的问题,请告诉我。

谢谢您的详细回答。但是我没办法让它工作。假身体A有什么特别的限制吗?奇怪的是,当我使用它时,什么都没有发生,在我的调试绘图视图上也没有绘制任何东西,该视图通常以粉色体和连接绘制。我最终得到了一些开始工作的东西。你使用鼠标点是对的,这绝对是正确的方法。一旦我找到了力/阻尼/频率的正确值,我就会回来。这里是我在1米圆圈中使用的值:频率:1,阻尼:0.3和最大力:10。再次感谢你的帮助
wheelJoint.setTarget(topAnchorX, topAnchorY);