@Override public void create() { { PolygonDef sd = new PolygonDef(); sd.setAsBox(50.0f, 10.0f); BodyDef bd = new BodyDef(); bd.position = new Vec2(0.0f, -10.0f); m_world.createStaticBody(bd).createShape(sd); } { PolygonDef sd = new PolygonDef(); float w = 4.0f; float h = 0.25f; sd.setAsBox(w, h); sd.density = 1.0f; sd.friction = 0.3f; sd.restitution = 0.0f; BodyDef bd = new BodyDef(); int numSlats = 8; float lastCMX = 0.0f; float eps = 0.14f; for (int i = 0; i < numSlats; ++i) { float newX = lastCMX + w - eps; lastCMX = (i * lastCMX + newX) / (i + 1); bd.position = new Vec2(newX, .25f + 2 * h * (numSlats - i - 1)); Body myBody = m_world.createDynamicBody(bd); myBody.createShape(sd); myBody.setMassFromShapes(); } } }
/** * Notification that this body is being added to the world * * @param world The world this body is being added to */ void addToWorld(World world) { org.jbox2d.dynamics.World jboxWorld = world.getJBoxWorld(); jboxBody = jboxWorld.createBody(jboxBodyDef); shape.createInBody(this); if (!staticBody) { jboxBody.setMassFromShapes(); } else { jboxBody.m_type = org.jbox2d.dynamics.Body.e_staticType; } }
public void create() { if (firstTime) { setCamera(0f, 10f, 10f); firstTime = false; } { PolygonDef sd = new PolygonDef(); sd.setAsBox(50.0f, 10.0f, new Vec2(0.0f, -10.0f), 0.0f); BodyDef bd = new BodyDef(); bd.position.set(0.0f, 0.0f); Body ground = m_world.createStaticBody(bd); ground.createShape(sd); sd.setAsBox(0.1f, 10.0f, new Vec2(20.0f, 10.0f), 0.0f); ground.createShape(sd); } float[] xs = {0.0f, -10.0f, -5.0f, 5.0f, 10.0f}; for (int j = 0; j < xs.length; ++j) { PolygonDef sd = new PolygonDef(); sd.setAsBox(0.5f, 0.5f); sd.density = 1.0f; sd.friction = 0.3f; for (int i = 0; i < 12; ++i) { BodyDef bd = new BodyDef(); // For this test we are using continuous physics for all boxes. // This is a stress test, you normally wouldn't do this for // performance reasons. bd.isBullet = true; bd.allowSleep = true; // float32 x = b2Random(-0.1f, 0.1f); // float32 x = i % 2 == 0 ? -0.025f : 0.025f; bd.position.set(xs[j] + parent.random(-.05f, .05f), 0.752f + 1.54f * i); // bd.position.Set(xs[j], 2.51f + 4.02f * i); Body body = m_world.createDynamicBody(bd); body.createShape(sd); body.setMassFromShapes(); } } }
private void checkBounds() { for (int i = 0; i < liquid.length; ++i) { if (liquid[i].getMemberWorldCenter().y < -10.0f) { m_world.destroyBody(liquid[i]); float massPerParticle = totalMass / nParticles; CircleDef pd = new CircleDef(); pd.density = 1.0f; pd.filter.groupIndex = -10; pd.radius = .05f; pd.restitution = 0.4f; pd.friction = 0.0f; float cx = 0.0f + parent.random(-0.6f, 0.6f); float cy = 15.0f + parent.random(-2.3f, 2.0f); BodyDef bd = new BodyDef(); bd.position = new Vec2(cx, cy); bd.fixedRotation = true; Body b = m_world.createBody(bd); b.createShape(pd).setUserData(LIQUID_INT); MassData md = new MassData(); md.mass = massPerParticle; md.I = 1.0f; b.setMass(md); b.allowSleeping(false); liquid[i] = b; } } if (bod.getMemberWorldCenter().y < -15.0f) { m_world.destroyBody(bod); PolygonDef polyDef = new PolygonDef(); polyDef.setAsBox(parent.random(0.3f, 0.7f), parent.random(0.3f, 0.7f)); polyDef.density = 1.0f; BodyDef bodyDef = new BodyDef(); bodyDef.position = new Vec2(0.0f, 25.0f); bod = m_world.createBody(bodyDef); bod.createShape(polyDef); bod.setMassFromShapes(); } }
@Override public void create() { if (firstTime) { setCamera(0.0f, 10.0f, 20.0f); firstTime = false; // this.settings.drawJoints = false; } Body ground = null; { PolygonDef sd = new PolygonDef(); sd.setAsBox(50.0f, 0.4f); BodyDef bd = new BodyDef(); bd.position.set(0.0f, 0.0f); ground = m_world.createBody(bd); ground.createShape(sd); sd.setAsBox(0.4f, 50.0f, new Vec2(-10.0f, 0.0f), 0.0f); ground.createShape(sd); sd.setAsBox(0.4f, 50.0f, new Vec2(10.0f, 0.0f), 0.0f); ground.createShape(sd); } ConstantVolumeJointDef cvjd = new ConstantVolumeJointDef(); float cx = 0.0f; float cy = 10.0f; float rx = 4.0f; float ry = 4.0f; int nBodies = 100; float bodyRadius = 0.4f; ArrayList<Body> bodies = new ArrayList<Body>(); for (int i = 0; i < nBodies; ++i) { float angle = PApplet.map(i, 0, nBodies, 0, 2 * 3.1415f); BodyDef bd = new BodyDef(); // bd.isBullet = true; bd.fixedRotation = true; float x = cx + (1.0f + .5f * (float) Math.cos(4 * (angle + .25f * 3.1415f))) * rx * (float) Math.sin(angle); float y = cy + (1.0f + .5f * (float) Math.cos(4 * (angle + .25f * 3.1415f))) * ry * (float) Math.cos(angle); bd.position.set(new Vec2(x, y)); Body body = m_world.createBody(bd); CircleDef cd = new CircleDef(); cd.radius = bodyRadius; cd.density = 1.0f; // cd.filter.groupIndex = -2; body.createShape(cd); cvjd.addBody(body); body.setMassFromShapes(); bodies.add(body); } cvjd.frequencyHz = 10.0f; cvjd.dampingRatio = 10.0f; ((ConstantVolumeJoint) m_world.createJoint(cvjd)).inflate(1.5f); cvjd = new ConstantVolumeJointDef(); for (int i = 0; i < nBodies / 4; ++i) { cvjd.addBody(bodies.get(i)); } cvjd.frequencyHz = 10.0f; cvjd.dampingRatio = 10.0f; ((ConstantVolumeJoint) m_world.createJoint(cvjd)).inflate(1.5f); cvjd = new ConstantVolumeJointDef(); for (int i = nBodies / 4; i < nBodies / 2; ++i) { cvjd.addBody(bodies.get(i)); } cvjd.frequencyHz = 10.0f; cvjd.dampingRatio = 10.0f; ((ConstantVolumeJoint) m_world.createJoint(cvjd)).inflate(1.5f); cvjd = new ConstantVolumeJointDef(); for (int i = nBodies / 2; i < 3 * nBodies / 4; ++i) { cvjd.addBody(bodies.get(i)); } cvjd.frequencyHz = 10.0f; cvjd.dampingRatio = 10.0f; ((ConstantVolumeJoint) m_world.createJoint(cvjd)).inflate(1.5f); cvjd = new ConstantVolumeJointDef(); for (int i = 3 * nBodies / 4; i < nBodies; ++i) { cvjd.addBody(bodies.get(i)); } cvjd.frequencyHz = 10.0f; cvjd.dampingRatio = 10.0f; ((ConstantVolumeJoint) m_world.createJoint(cvjd)).inflate(1.5f); // cvjd = new ConstantVolumeJointDef(); // for (int i=0+nBodies/8; i<nBodies/4+nBodies/8; ++i) { // cvjd.addBody(bodies.get(i)); // } // cvjd.frequencyHz = 10.0f; // cvjd.dampingRatio = 10.0f; // m_world.createJoint(cvjd); // // cvjd = new ConstantVolumeJointDef(); // for (int i=nBodies/4+nBodies/8; i<nBodies/2+nBodies/8; ++i) { // cvjd.addBody(bodies.get(i)); // } // cvjd.frequencyHz = 10.0f; // cvjd.dampingRatio = 10.0f; // m_world.createJoint(cvjd); // // cvjd = new ConstantVolumeJointDef(); // for (int i=nBodies/2+nBodies/8; i<3*nBodies/4+nBodies/8; ++i) { // cvjd.addBody(bodies.get(i)); // } // cvjd.frequencyHz = 10.0f; // cvjd.dampingRatio = 10.0f; // m_world.createJoint(cvjd); // cvjd = new ConstantVolumeJointDef(); // for (int i=3*nBodies/4+nBodies/8; i<nBodies+nBodies/8; ++i) { // int index = i; // if (index >= bodies.size()) index -= bodies.size(); // cvjd.addBody(bodies.get(index)); // } // // cvjd.frequencyHz = 10.0f; // cvjd.dampingRatio = 10.0f; // m_world.createJoint(cvjd); // cvjd = new ConstantVolumeJointDef(); // cvjd.addBody(bodies.get(0)); // cvjd.addBody(bodies.get(nBodies/4)); // cvjd.addBody(bodies.get(nBodies/2)); // cvjd.addBody(bodies.get(3*nBodies/4)); // cvjd.frequencyHz = 10.0f; // m_world.createJoint(cvjd); // // cvjd = new ConstantVolumeJointDef(); // cvjd.addBody(bodies.get(0 + nBodies/8)); // cvjd.addBody(bodies.get(nBodies/4 + nBodies/8)); // cvjd.addBody(bodies.get(nBodies/2 + nBodies/8)); // cvjd.addBody(bodies.get(3*nBodies/4 + nBodies/8)); // cvjd.frequencyHz = 1.0f; // m_world.createJoint(cvjd); BodyDef bd2 = new BodyDef(); PolygonDef psd = new PolygonDef(); psd.setAsBox(3.0f, 1.5f, new Vec2(cx, cy + 15.0f), 0.0f); psd.density = 1.0f; bd2.position = new Vec2(cx, cy + 15.0f); Body fallingBox = m_world.createBody(bd2); fallingBox.createShape(psd); fallingBox.setMassFromShapes(); }