【发布时间】:2014-09-12 04:24:41
【问题描述】:
我一直在尝试关注the tutorial here 构建一个旋转接头;本质上,一只手臂。 我需要将手臂(一个矩形)固定到正方形上的一个点并围绕它旋转。当施加力时,我希望这两个形状表现得像一个,固定在一起,而手臂像布娃娃一样绕着盒子飞。
不幸的是,这根本不起作用。手臂起初是连接在一起的,然后当我施加力时,两个形状分开并且以我无法解释的奇怪方式表现。就好像锚处于一些不稳定的位置一样。
我正在使用 jbox2d 和很多来自this tutorial 的代码。
(我已将初始锚点设置为中心只是为了看看它是否会起作用) (有一些奇怪的转换,因为我用的是openGl)
这里是要点:
public class New_char
{
Vec2 torso_pos, arm_pos;
Body torso, arm;
PolygonShape torso_shape, arm_shape;
BodyDef torso_def, arm_def;
FixtureDef torso_fix, arm_fix;
RevoluteJointDef torsoArmDef;
RevoluteJoint torsoArmJoint;
//float[] torSize = {0.5f, 0.5f}, armSize={0.75f, 0.10f};
public New_char(World world, float[] pos)
{
//this.torso_pos = new Vec2(pos[0], pos[1]) ; this.arm_pos = new Vec2(pos[0]+10,pos[1]+10);
//out.println(this.arm_pos+" thepos "+this.torso_pos);
this.torso_def = new BodyDef() ; this.arm_def = new BodyDef();
torso_def.type = BodyType.DYNAMIC ; arm_def.type = BodyType.DYNAMIC;
torso_def.position.set(320 / 30 / 2, 240 / 30 / 2) ; arm_def.position.set(320 / 30 / 2, 240 / 30 / 2);
this.torso_shape = new PolygonShape() ; this.arm_shape = new PolygonShape();
this.torso_shape.setAsBox(0.50f, 0.50f) ; this.arm_shape.setAsBox(0.75f, 0.10f);
this.torso_fix = new FixtureDef() ; this.arm_fix = new FixtureDef();
this.torso_fix.density = 0.1f ; this.arm_fix.density = 0.5f;
this.torso_fix.shape = this.torso_shape ; this.arm_fix.shape = this.arm_shape;
this.torso = world.createBody(this.torso_def) ; this.arm = world.createBody(this.arm_def);
this.torso.createFixture(this.torso_fix) ; this.arm.createFixture(this.arm_fix);
this.torsoArmDef = new RevoluteJointDef();
this.torsoArmDef.bodyA = this.torso ; this.torsoArmDef.bodyB = this.arm;
this.torsoArmDef.collideConnected = false;
this.torsoArmDef.localAnchorA.set(this.torso.getWorldCenter());
//Vec2 armpin = new Vec2(1f, 1f);
this.torsoArmDef.localAnchorB.set(this.arm.getWorldCenter());
this.torsoArmJoint = (RevoluteJoint)world.createJoint(this.torsoArmDef);
【问题讨论】:
-
我知道有类似的问题,但我觉得他们没有得到充分的回答,也没有那么具体。
-
如果你施加的力足够大,关节约束很容易被拉开。
-
您通常对旋转关节及其主体使用什么密度/力值?
-
这并不像密度和施加的力之间的比率那么重要。例如。 density = 1 和 force = 1 与 density = 10 和 force = 10 的结果相同
-
很公平。那么旋转接头的最佳比例是多少?
标签: java c++ opengl box2d revolute-joints