/** Initialize the bodies and offsets using the current transforms. */ public void initialize (Body body1, Body body2) { this.bodyA = body1; this.bodyB = body2; this.linearOffset.set(bodyA.getLocalPoint(bodyB.getPosition())); this.angularOffset = bodyB.getAngle() - bodyA.getAngle(); }
public void create () { cam = new OrthographicCamera(48, 32); cam.position.set(0, 15, 0); renderer = new Box2DDebugRenderer(); world = new World(new Vector2(0, -10), true); Body body = world.createBody(new BodyDef()); CircleShape shape = new CircleShape(); shape.setRadius(1f); MassData mass = new MassData(); mass.mass = 1f; body.setMassData(mass); body.setFixedRotation(true); body.setType(BodyType.KinematicBody); body.createFixture(shape, 1); body.setBullet(true); body.setTransform(new Vector2(0, 0), body.getAngle()); body.setLinearVelocity(new Vector2(50f, 0)); }
protected void renderBody (Body body) { Transform transform = body.getTransform(); for (Fixture fixture : body.getFixtureList()) { if (drawBodies) { drawShape(fixture, transform, getColorByBody(body)); if (drawVelocities) { Vector2 position = body.getPosition(); drawSegment(position, body.getLinearVelocity().add(position), VELOCITY_COLOR); } } if (drawAABBs) { drawAABB(fixture, transform); } } }
@Override public boolean keyDown (int keyCode) { if (keyCode == Keys.D) m_platform.setType(BodyType.DynamicBody); if (keyCode == Keys.S) m_platform.setType(BodyType.StaticBody); if (keyCode == Keys.K) { m_platform.setType(BodyType.KinematicBody); m_platform.setLinearVelocity(tmp.set(-m_speed, 0)); m_platform.setAngularVelocity(0); } return false; }
/** Initialize the bodies, anchors, and reference angle using a world anchor point. */ public void initialize (Body bodyA, Body bodyB, Vector2 anchor) { this.bodyA = bodyA; this.bodyB = bodyB; localAnchorA.set(bodyA.getLocalPoint(anchor)); localAnchorB.set(bodyB.getLocalPoint(anchor)); referenceAngle = bodyB.getAngle() - bodyA.getAngle(); }
case DYING: state.setCurrentState("dying"); Filter filter = body.getFixtureList().get(0).getFilterData(); filter.maskBits = GameManager.NOTHING_BIT; body.getFixtureList().get(0).setFilterData(filter); ActorBuilder actorBuilder = ActorBuilder.init(body.getWorld(), world); actorBuilder.createPortal(); GameManager.getInstance().playSound("PortalAppears.ogg"); ActorBuilder actorBuilder = ActorBuilder.init(body.getWorld(), world); actorBuilder.createPowerUp(body.getPosition().x, body.getPosition().y); body.getWorld().destroyBody(body); mRigidBody.set(entityId, false); mEnemy.set(entityId, false); case WALKING_LEFT: state.setCurrentState("walking_left"); if (body.getLinearVelocity().x > -enemy.getSpeed()) { body.applyLinearImpulse(new Vector2(-enemy.getSpeed() * body.getMass(), 0), body.getWorldCenter(), true); if (hitSomethingHorizontal(body, fromVector.set(body.getPosition()), toVector.set(body.getPosition().x - 0.5f, body.getPosition().y))) { changeWalkingState(enemy); case WALKING_RIGHT: state.setCurrentState("walking_right"); if (body.getLinearVelocity().x < enemy.getSpeed()) { body.applyLinearImpulse(new Vector2(enemy.getSpeed() * body.getMass(), 0), body.getWorldCenter(), true);
@Override public void render () { Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); cam.position.set(player.getPosition().x, player.getPosition().y, 0); cam.update(); renderer.render(world, cam.combined); Vector2 vel = player.getLinearVelocity(); Vector2 pos = player.getPosition(); boolean grounded = isPlayerGrounded(Gdx.graphics.getDeltaTime()); if (grounded) { player.setLinearVelocity(vel.x, vel.y); player.setLinearVelocity(vel.x * 0.9f, vel.y); } else { stillTime = 0; player.applyLinearImpulse(0, -24, pos.x, pos.y, true); player.applyLinearImpulse(-2f, 0, pos.x, pos.y, true); player.applyLinearImpulse(2f, 0, pos.x, pos.y, true); jump = false; if (grounded) { player.setLinearVelocity(vel.x, 0); System.out.println("jump before: " + player.getLinearVelocity()); player.setTransform(pos.x, pos.y + 0.01f, 0); player.applyLinearImpulse(0, 40, pos.x, pos.y, true);
for (int i = 0; i < boxes.size(); i++) { Body box = boxes.get(i); Vector2 position = box.getPosition(); // that's the box's center position float angle = MathUtils.radiansToDegrees * box.getAngle(); // the rotation angle around the center batch.draw(textureRegion, position.x - 1, position.y - 1, // the bottom left corner of the box, unrotated 1f, 1f, // the rotation center relative to the bottom left corner of the box
ground.createFixture(shape, 0.0f); ground.createFixture(shape, 0); shape.dispose(); bd.position.set(xs[j] + x, 0.752f + 1.54f * i); Body body = world.createBody(bd); body.setUserData(n); body.createFixture(fd);
private void createBoxes () { // next we create 50 boxes at random locations above the ground // body. First we create a nice polygon representing a box 2 meters // wide and high. PolygonShape boxPoly = new PolygonShape(); boxPoly.setAsBox(1, 1); // next we create the 50 box bodies using the PolygonShape we just // defined. This process is similar to the one we used for the ground // body. Note that we reuse the polygon for each body fixture. for (int i = 0; i < 20; i++) { // Create the BodyDef, set a random position above the // ground and create a new body BodyDef boxBodyDef = new BodyDef(); boxBodyDef.type = BodyType.DynamicBody; boxBodyDef.position.x = -24 + (float)(Math.random() * 48); boxBodyDef.position.y = 10 + (float)(Math.random() * 100); Body boxBody = world.createBody(boxBodyDef); boxBody.createFixture(boxPoly, 1); // add the box to our list of boxes boxes.add(boxBody); } // we are done, all that's left is disposing the boxPoly boxPoly.dispose(); }
@Override public void update(float dt) { super.update(dt); setPosition(body.getPosition().x - getWidth() / 2, body.getPosition().y - getHeight() / 2); velocity.y = body.getLinearVelocity().y; body.setLinearVelocity(velocity); } }
public CirclePlatform (int x, int y, float radius, float da) { platform = createCircle(BodyType.KinematicBody, radius, 1); platform.setTransform(x, y, 0); platform.getFixtureList().get(0).setUserData("p"); platform.setAngularVelocity(da); platform.setUserData(this); }
protected void toNormalRelativeAngle () { // normalize body angle since it can grows unbounded float angle = AMath.normalRelativeAngle(body.getAngle()); body.setTransform(body.getPosition(), angle); } }
public void draw(IFieldRenderer renderer) { CircleShape shape = (CircleShape)body.getFixtureList().get(0).getShape(); Vector2 center = body.getPosition(); float radius = shape.getRadius(); renderer.fillCircle(center.x, center.y, radius, primaryColor); // Draw a smaller circle to show the ball's rotation. float angle = body.getAngle(); float smallCenterX = center.x + (radius / 2) * MathUtils.cos(angle); float smallCenterY = center.y + (radius / 2) * MathUtils.sin(angle); renderer.fillCircle(smallCenterX, smallCenterY, radius / 4, secondaryColor); }
/** Initialize the bodies, anchors, axis, and reference angle using the world anchor and world axis. */ public void initialize (Body bodyA, Body bodyB, Vector2 anchor, Vector2 axis) { this.bodyA = bodyA; this.bodyB = bodyB; localAnchorA.set(bodyA.getLocalPoint(anchor)); localAnchorB.set(bodyB.getLocalPoint(anchor)); localAxisA.set(bodyA.getLocalVector(axis)); referenceAngle = bodyB.getAngle() - bodyA.getAngle(); }
@Override public void update(float dt) { setRegion(getFrame(dt)); if(currentState == State.STANDING_SHELL && stateTime > 5){ currentState = State.WALKING; velocity.x = 1; System.out.println("WAKE UP SHELL"); } setPosition(b2body.getPosition().x - getWidth() / 2, b2body.getPosition().y - 8 /MarioBros.PPM); b2body.setLinearVelocity(velocity); }
@Override public boolean mouseMoved(int screenX, int screenY) { viewport.getCamera().unproject(point.set(screenX, screenY, 0)); pointerBody.setTransform(point.x, point.y, pointerBody.getAngle() + 5 * MathUtils.degreesToRadians); return true; }
protected void renderBody (Body body) { Transform transform = body.getTransform(); int len = body.getFixtureList().size; Array<Fixture> fixtures = body.getFixtureList(); for (int i = 0; i < len; i++) { Fixture fixture = fixtures.get(i); if (drawBodies) { if (body.isActive() == false && drawInactiveBodies) drawShape(fixture, transform, SHAPE_NOT_ACTIVE); else if (body.getType() == BodyType.StaticBody) drawShape(fixture, transform, SHAPE_STATIC); else if (body.getType() == BodyType.KinematicBody) drawShape(fixture, transform, SHAPE_KINEMATIC); else if (body.isAwake() == false) drawShape(fixture, transform, SHAPE_NOT_AWAKE); else drawShape(fixture, transform, SHAPE_AWAKE); } if (drawAABBs) { drawAABB(fixture, transform); } } }
@Override public void render () { if (m_platform.getType() == BodyType.KinematicBody) { Vector2 p = m_platform.getTransform().getPosition(); Vector2 v = m_platform.getLinearVelocity(); if ((p.x < -10 && v.x < 0) || (p.x > 10 && v.x > 0)) { v.x = -v.x; m_platform.setLinearVelocity(v); } } super.render(); // if (renderer.batch != null) { // renderer.batch.begin(); // // renderer.batch.drawText(renderer.font, "Keys: (d) dynamic, (s) static, (k) kinematic", 0, Gdx.app.getGraphics() // // .getHeight(), Color.WHITE); // renderer.batch.end(); // } } }
@Override protected void createWorld (World world) { { BodyDef bd = new BodyDef(); bd.position.set(0, 0); Body body = world.createBody(bd); EdgeShape shape = new EdgeShape(); shape.set(new Vector2(-10, 0), new Vector2(10, 0)); body.createFixture(shape, 0); shape.dispose(); PolygonShape poly = new PolygonShape(); poly.setAsBox(0.2f, 1.0f, new Vector2(0.5f, 1.0f), 0); body.createFixture(poly, 0); poly.dispose(); } { BodyDef bd = new BodyDef(); bd.type = BodyType.DynamicBody; bd.position.set(0, 20); PolygonShape shape = new PolygonShape(); shape.setAsBox(2, 0.1f); m_body = world.createBody(bd); m_body.createFixture(shape, 1); m_angularVelocity = 33.468121f; m_body.setLinearVelocity(new Vector2(0, -100)); m_body.setAngularVelocity(m_angularVelocity); shape.dispose(); } }