Refine search
private void initAxis() { BodyDef axisDef = new BodyDef(); axisDef.type = BodyType.STATIC; axisDef.position = new Vec2(3, 3); axis = world.createBody(axisDef); CircleShape axisShape = new CircleShape(); axisShape.setRadius(0.02f); axisShape.m_p.set(0, 0); FixtureDef axisFixture = new FixtureDef(); axisFixture.shape = axisShape; axis.createFixture(axisFixture); }
/** Take a time step. This performs collision detection, integration, and constraint solution. * @param timeStep the amount of time to simulate, this should not vary. * @param velocityIterations for the velocity constraint solver. * @param positionIterations for the position constraint solver. */ public void step (float timeStep, int velocityIterations, int positionIterations) { world.step(timeStep, velocityIterations, positionIterations); }
/** Construct a world object. * @param gravity the world gravity vector. * @param doSleep improve performance by not simulating inactive bodies. */ public World (Vector2 gravity, boolean doSleep) { world = new org.jbox2d.dynamics.World(tmp.set(gravity.x, gravity.y)); world.setAllowSleep(doSleep); }
/** Destroy a rigid body given a definition. No reference to the definition is retained. This function is locked during * callbacks. * @warning This automatically deletes all associated shapes and joints. * @warning This function is locked during callbacks. */ public void destroyBody (Body body) { JointEdge jointEdge = body.body.getJointList(); while (jointEdge != null) { JointEdge next = jointEdge.next; world.destroyJoint(jointEdge.joint); joints.remove(jointEdge.joint); jointEdge = next; } world.destroyBody(body.body); bodies.remove(body.body); for (Fixture fixture : body.fixtures) { fixtures.remove(fixture.fixture); } }
assert (m_world.isLocked() == false); if (m_world.isLocked() == true) { return; m_I = massData.I - m_mass * Vec2.dot(massData.center, massData.center); assert (m_I > 0.0f); m_invI = 1.0f / m_I; final Vec2 oldCenter = m_world.getPool().popVec2(); oldCenter.set(m_sweep.c); m_sweep.localCenter.set(massData.center); final Vec2 temp = m_world.getPool().popVec2(); temp.set(m_sweep.c).subLocal(oldCenter); Vec2.crossToOut(m_angularVelocity, temp, temp); m_linearVelocity.addLocal(temp); m_world.getPool().pushVec2(2);
@Override public synchronized void step(TestbedSettings settings) { super.step(settings); if (m_count < MAX_NUM) { BodyDef bd = new BodyDef(); bd.type = BodyType.DYNAMIC; bd.position.set(0.0f, 10.0f); Body body = m_world.createBody(bd); PolygonShape shape = new PolygonShape(); shape.setAsBox(0.125f, 0.125f); body.createFixture(shape, 1.0f); ++m_count; } }
world = new World(new Vec2(0.0f, -10.0f), new DefaultWorldPool(100, 10), strategy); Body ground = null; BodyDef bd = new BodyDef(); ground = world.createBody(bd); bd.position.set(-10.01f, 50.0f); Body bod = world.createBody(bd); bod.createFixture(sides); bd.position.set(10.01f, 50.0f); bod = world.createBody(bd); bod.createFixture(sides); Body body = world.createBody(bd); for (int i = 0; i < numPieces; i++) { cd = new CircleShape(); cd.m_radius = .5f; fd.shape = cd; rjd.maxMotorTorque = 1000000.0f; rjd.enableMotor = true; world.createJoint(rjd); Body body = world.createBody(bd); rjd.maxMotorTorque = 20000; rjd.enableMotor = true; m_joint1 = (RevoluteJoint) world.createJoint(rjd);
private void launchBomb(Vec2 position, Vec2 velocity) { if (bomb != null) { m_world.destroyBody(bomb); bomb = null; } // todo optimize this BodyDef bd = new BodyDef(); bd.type = BodyType.DYNAMIC; bd.position.set(position); bd.bullet = true; bomb = m_world.createBody(bd); bomb.setLinearVelocity(velocity); CircleShape circle = new CircleShape(); circle.m_radius = 0.3f; FixtureDef fd = new FixtureDef(); fd.shape = circle; fd.density = 20f; fd.restitution = 0; Vec2 minV = new Vec2(position); Vec2 maxV = new Vec2(position); minV.subLocal(new Vec2(.3f, .3f)); maxV.addLocal(new Vec2(.3f, .3f)); aabb.lowerBound.set(minV); aabb.upperBound.set(maxV); bomb.createFixture(fd); }
Vec2 gravity = new Vec2(0,-10); World world = new World(gravity); BodyDef groundBodyDef = new BodyDef(); groundBodyDef.position.set(0, -10); Body groundBody = world.createBody(groundBodyDef); PolygonShape groundBox = new PolygonShape(); groundBox.setAsBox(50, 10); groundBody.createFixture(groundBox, 0); BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyType.DYNAMIC; bodyDef.position.set(0, 4); Body body = world.createBody(bodyDef); PolygonShape dynamicBox = new PolygonShape(); dynamicBox.setAsBox(1, 1); FixtureDef fixtureDef = new FixtureDef(); fixtureDef.shape = dynamicBox; fixtureDef.density = 1; fixtureDef.friction = 0.3f; body.createFixture(fixtureDef); world.step(timeStep, velocityIterations, positionIterations); Vec2 position = body.getPosition(); float angle = body.getAngle(); System.out.printf("%4.2f %4.2f %4.2f\n", position.x, position.y, angle);
Body b = contact.getFixtureB().getBody(); if (a.getUserData() == BodyData.BIRD && b.getUserData() == BodyData.ROCKET) if (b.getUserData() == BodyData.BIRD bodyDefFloor.type = BodyDef.BodyType.StaticBody; Body floor = world.createBody(bodyDefFloor); Body bird = world.createBody(bodyDefBird); Body rocket1 = world.createBody(bodyDefRocket1); Body rocket2 = world.createBody(bodyDefRocket2); world.setContactListener(new MyContactListener()); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); world.step(1 / 60f, 8, 3); world.destroyBody(body); world.dispose();
private void initReel() { BodyDef reelDef = new BodyDef(); reelDef.type = BodyType.DYNAMIC; reelDef.position = new Vec2(3, 3); reel = world.createBody(reelDef); FixtureDef fixture = new FixtureDef(); fixture.friction = 0.5f; fixture.restitution = 0.4f; fixture.density = 1; int parts = 30; for (int i = 0; i < parts; ++i) { PolygonShape shape = new PolygonShape(); double angle1 = i / (double) parts * 2 * Math.PI; double x1 = 2.7 * Math.cos(angle1); double y1 = 2.7 * Math.sin(angle1); double angle2 = (i + 1) / (double) parts * 2 * Math.PI; double x2 = 2.7 * Math.cos(angle2); double y2 = 2.7 * Math.sin(angle2); double angle = (angle1 + angle2) / 2; double x = 0.01 * Math.cos(angle); double y = 0.01 * Math.sin(angle); shape.set(new Vec2[] { new Vec2((float) x1, (float) y1), new Vec2((float) x2, (float) y2), new Vec2((float) (x2 - x), (float) (y2 - y)), new Vec2((float) (x1 - x), (float) (y1 - y)) }, 4); fixture.shape = shape; reel.createFixture(fixture); } }
void Break() { // Create two bodies from one. Body body1 = m_piece1.getBody(); Vec2 center = body1.getWorldCenter(); body1.destroyFixture(m_piece2); m_piece2 = null; BodyDef bd = new BodyDef(); bd.type = BodyType.DYNAMIC; bd.position = body1.getPosition(); bd.angle = body1.getAngle(); Body body2 = getWorld().createBody(bd); m_piece2 = body2.createFixture(m_shape2, 1.0f); // Compute consistent velocities for new bodies based on // cached velocity. Vec2 center1 = body1.getWorldCenter(); Vec2 center2 = body2.getWorldCenter(); Vec2 velocity1 = m_velocity.add(Vec2.cross(m_angularVelocity, center1.sub(center))); Vec2 velocity2 = m_velocity.add(Vec2.cross(m_angularVelocity, center2.sub(center))); body1.setAngularVelocity(m_angularVelocity); body1.setLinearVelocity(velocity1); body2.setAngularVelocity(m_angularVelocity); body2.setLinearVelocity(velocity2); }
CircleShape circleShape = new CircleShape(); circleShape.m_radius = 1; Shape shape = circleShape; BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyType.DYNAMIC; bodyDef.position.set(-5, 0); bodyDef.allowSleep = false; pendulum = getWorld().createBody(bodyDef); pendulum.createFixture(shape, 1); BodyDef bodyDef = new BodyDef(); bodyDef.type = BodyType.STATIC; ground = getWorld().createBody(bodyDef); jointDef.initialize(pendulum, ground, new Vec2(0, 0)); else jointDef.initialize(ground, pendulum, new Vec2(0, 0)); pendulum.applyAngularImpulse(10000); getWorld().createJoint(jointDef);
public void createCircle() { float radius = 2.0f; CircleShape shape = new CircleShape(); shape.m_p.setZero(); shape.m_radius = radius; FixtureDef fd = new FixtureDef(); fd.shape = shape; fd.density = 1.0f; fd.friction = 0.0f; Vec2 p = new Vec2((float)Math.random(), 3.0f + (float)Math.random()); BodyDef bd = new BodyDef(); bd.type = BodyType.DYNAMIC; bd.position = p; //bd.allowSleep = false; Body body = getWorld().createBody(bd); body.createFixture(fd); }
@Override public void initTest(boolean deserialized) { { BodyDef bd = new BodyDef(); Body ground = m_world.createBody(bd); ChainShape shape = new ChainShape(); Vec2[] vertices = new Vec2[] {new Vec2(-20, 0), new Vec2(20, 0), new Vec2(20, 40), new Vec2(-20, 40)}; shape.createLoop(vertices, 4); ground.createFixture(shape, 0.0f); } m_world.setParticleRadius(0.15f); m_world.setParticleDamping(0.2f); { PolygonShape shape = new PolygonShape(); shape.setAsBox(8, 10, new Vec2(-12, 10.1f), 0); ParticleGroupDef pd = new ParticleGroupDef(); pd.shape = shape; m_world.createParticleGroup(pd); } }
BodyDef bodyBD = new BodyDef(); bodyBD.type = BodyType.DynamicBody; FixtureDef bodyFD = new FixtureDef(); bodyFD.density = 1.0f; bodyFD.friction = 1.0f; bodyFD.restitution = 1.0f; bodyRed = world.createBody(bodyBD); bodyGreen = world.createBody(bodyBD); bodyRed.createFixture(bodyFD); bodyGreen.createFixture(bodyFD); prevX = bodyGreen.getPosition().x; prevY = bodyGreen.getPosition().y; world.setContactListener(new ContactListener() { world.getBodies(bodies); bodies.get(contact.getChildIndexA()).getPosition().set(prevX, prevY); prevX = bodyGreen.getPosition().x; prevY = bodyGreen.getPosition().y; world.step(1/45f, 2, 6);
m_world.setAllowSleep(settings.getSetting(TestbedSettings.AllowSleep).enabled); m_world.setWarmStarting(settings.getSetting(TestbedSettings.WarmStarting).enabled); m_world.setSubStepping(settings.getSetting(TestbedSettings.SubStepping).enabled); m_world.setContinuousPhysics(settings.getSetting(TestbedSettings.ContinuousCollision).enabled); m_world.step(timeStep, settings.getSetting(TestbedSettings.VelocityIterations).value, settings.getSetting(TestbedSettings.PositionIterations).value); m_world.drawDebugData(); int particleCount = m_world.getParticleCount(); int groupCount = m_world.getParticleGroupCount(); debugDraw.drawString( 5, m_textLine, "bodies/contacts/joints/proxies/particles/groups = " + m_world.getBodyCount() + "/" + m_world.getContactCount() + "/" + m_world.getJointCount() + "/" + m_world.getProxyCount() + "/" + particleCount + "/" + groupCount, Color3f.WHITE); m_textLine += TEXT_LINE_SPACE; Profile p = getWorld().getProfile(); p.toDebugStrings(statsList); mouseTracerPosition.x += timeStep * mouseTracerVelocity.x; mouseTracerPosition.y += timeStep * mouseTracerVelocity.y; pshape.m_p.set(mouseTracerPosition); pshape.m_radius = 2; pcallback.init(m_world, pshape, mouseTracerVelocity); pshape.computeAABB(paabb, identity, 0);
private void initBalls() { float ballRadius = 0.15f; BodyDef ballDef = new BodyDef(); ballDef.type = BodyType.DYNAMIC; FixtureDef fixtureDef = new FixtureDef(); fixtureDef.friction = 0.3f; fixtureDef.restitution = 0.3f; fixtureDef.density = 0.2f; CircleShape shape = new CircleShape(); shape.m_radius = ballRadius; fixtureDef.shape = shape; ballDef.position.x = 3 + x; ballDef.position.y = 3 + y; Body body = world.createBody(ballDef); body.createFixture(fixtureDef); body = world.createBody(ballDef); body.createFixture(fixtureDef); body = world.createBody(ballDef); body.createFixture(fixtureDef); body = world.createBody(ballDef); body.createFixture(fixtureDef);
public ConstantVolumeJoint(World argWorld, ConstantVolumeJointDef def) { super(argWorld.getPool(), def); world = argWorld; if (def.bodies.size() <= 2) { for (int i = 0; i < targetLengths.length; ++i) { final int next = (i == targetLengths.length - 1) ? 0 : i + 1; float dist = bodies[i].getWorldCenter().sub(bodies[next].getWorldCenter()).length(); targetLengths[i] = dist; djd.initialize(bodies[i], bodies[next], bodies[i].getWorldCenter(), bodies[next].getWorldCenter()); distanceJoints[i] = (DistanceJoint) world.createJoint(djd); normals[i] = new Vec2();