private float getBodyArea() { float area = 0.0f; for (int i = 0; i < bodies.length; ++i) { final int next = (i == bodies.length - 1) ? 0 : i + 1; area += bodies[i].getWorldCenter().x * bodies[next].getWorldCenter().y - bodies[next].getWorldCenter().x * bodies[i].getWorldCenter().y; } area *= .5f; return area; }
public Vector2 getWorldCenter () { Vec2 wc = body.getWorldCenter(); return worldCenter.set(wc.x, wc.y); }
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);
private float getBodyArea() { float area = 0.0f; for (int i = 0; i < bodies.length; ++i) { final int next = (i == bodies.length - 1) ? 0 : i + 1; area += bodies[i].getWorldCenter().x * bodies[next].getWorldCenter().y - bodies[next].getWorldCenter().x * bodies[i].getWorldCenter().y; } area *= .5f; return area; }
Vec2 bp = b.getWorldCenter(); float bm = b.getMass(); float bI = b.getInertia() - bm * b.getLocalCenter().lengthSquared();
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);
for (Body b = m_bodyList; b != null; b = b.getNext()) { xf.set(b.getTransform()); xf.p.set(b.getWorldCenter()); m_debugDraw.drawTransform(xf);
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); }
private float getBodyArea() { float area = 0.0f; for (int i = 0; i < bodies.length; ++i) { final int next = (i == bodies.length - 1) ? 0 : i + 1; area += bodies[i].getWorldCenter().x * bodies[next].getWorldCenter().y - bodies[next].getWorldCenter().x * bodies[i].getWorldCenter().y; } area *= .5f; return area; }
private float getBodyArea() { float area = 0.0f; for (int i = 0; i < bodies.length; ++i) { final int next = (i == bodies.length - 1) ? 0 : i + 1; area += bodies[i].getWorldCenter().x * bodies[next].getWorldCenter().y - bodies[next].getWorldCenter().x * bodies[i].getWorldCenter().y; } area *= .5f; return area; }
private float getBodyArea() { float area = 0.0f; for (int i = 0; i < bodies.length - 1; ++i) { final int next = (i == bodies.length - 1) ? 0 : i + 1; area += bodies[i].getWorldCenter().x * bodies[next].getWorldCenter().y - bodies[next].getWorldCenter().x * bodies[i].getWorldCenter().y; } area *= .5f; return area; }
this.mScene = new Scene(); this.mScene.setBackground(new Background(0, 0, 0)); this.mScene.setOnSceneTouchListener(this); this.mScene.setOnAreaTouchListener(this); this.mPhysicsWorld = new PhysicsWorld(new Vector2(0, 10), false); this.mScene.registerUpdateHandler(this.mPhysicsWorld); final Rectangle ground = new Rectangle(0, CAMERA_HEIGHT - 2, CAMERA_WIDTH, 2, vertexBufferObjectManager); final Rectangle left = new Rectangle(0, 0, 2, CAMERA_HEIGHT, vertexBufferObjectManager); final Rectangle right = new Rectangle(CAMERA_WIDTH - 2, 0, 2, CAMERA_HEIGHT, vertexBufferObjectManager); Body g =PhysicsFactory.createBoxBody(this.mPhysicsWorld, ground, BodyType.StaticBody, wallFixtureDef2); Body l =PhysicsFactory.createBoxBody(this.mPhysicsWorld, left, BodyType.StaticBody, wallFixtureDef1); final float width = 2*g.getWorldCenter().x; final float height = 2*l.getWorldCenter().y;
Body body, planet; //your 'character' and planet ... Vector2 bodyCenter = body.getWorldCenter(); Vector2 planetCenter = planet.getWorldCenter(); //if you would use getPosition it would be related to the body's origin! Vector2 subVector = bodyCenter.sub( planetCenter ); body.setTransform(x, y, subVector.angle() ); //it is possible that you will need to make '-angle()' here or something!
Vec2 bp = b.getWorldCenter(); float bm = b.getMass(); float bI = b.getInertia() - bm * b.getLocalCenter().lengthSquared();
void applyImpulse(GameObjectInstance aInstance, Force aForce) { Body theBody = dynamicObjects.get(aInstance); if (theBody != null) { theBody.applyLinearImpulse(new Vec2(aForce.forceX, aForce.forceY), theBody.getWorldCenter()); } }
void applyForce(GameObjectInstance aInstance, Force aForce) { Body theBody = dynamicObjects.get(aInstance); if (theBody != null) { theBody.applyForce(new Vec2(aForce.forceX, aForce.forceY), theBody.getWorldCenter()); } }
if (keycode == Input.Keys.UP) { Body body = player.getBody(); body.applyLinearImpulse(new Vector2(0, 30000), body.getWorldCenter(), true); }
@Override public void step(TestbedSettings settings) { super.step(settings); addTextLine("Use 'wasd' to move, 'e' and 's' drift."); if (getModel().getKeys()['w']) { Vec2 f = m_body.getWorldVector(new Vec2(0.0f, -30.0f)); Vec2 p = m_body.getWorldPoint(m_body.getLocalCenter().add(new Vec2(0.0f, 2.0f))); m_body.applyForce(f, p); } else if (getModel().getKeys()['q']) { Vec2 f = m_body.getWorldVector(new Vec2(0.0f, -30.0f)); Vec2 p = m_body.getWorldPoint(m_body.getLocalCenter().add(new Vec2(-.2f, 0f))); m_body.applyForce(f, p); } else if (getModel().getKeys()['e']) { Vec2 f = m_body.getWorldVector(new Vec2(0.0f, -30.0f)); Vec2 p = m_body.getWorldPoint(m_body.getLocalCenter().add(new Vec2(.2f, 0f))); m_body.applyForce(f, p); } else if (getModel().getKeys()['s']) { Vec2 f = m_body.getWorldVector(new Vec2(0.0f, 30.0f)); Vec2 p = m_body.getWorldCenter(); m_body.applyForce(f, p); } if (getModel().getKeys()['a']) { m_body.applyTorque(20.0f); } if (getModel().getKeys()['d']) { m_body.applyTorque(-20.0f); } }
Body body, centerBody; Vector2 center = new Vector2(0, 0); ... //in render method float G = 1; //modifier of gravity value - you can make it bigger to have stronger gravity float distance = body.getPosition().dst( center ); float forceValue = G / (distance * distance); Vector2 direction = center.sub( body.getPosition() ) ); body.applyForce( direction.scl( forceValue ), body.getWorldCenter() );
for (Body b = m_bodyList; b != null; b = b.getNext()) { xf.set(b.getTransform()); xf.p.set(b.getWorldCenter()); m_debugDraw.drawTransform(xf);