Java 类com.badlogic.gdx.physics.box2d.Body 实例源码

项目:GDX-Engine    文件:PhysicsTiledScene.java   
/**
 * create Revolute Joint
 */
public RevoluteJoint createRevoluteJoint(Body bodyA, Body bodyB,
        Vector2 jointPositionA, Vector2 jointPositionB,
        boolean enabledMotor, int maxMotorTorque, int motorSpeed) {
    RevoluteJointDef rJoint = new RevoluteJointDef();
    rJoint.bodyA = bodyA;
    rJoint.bodyB = bodyB;
    rJoint.localAnchorA.set(jointPositionA.x * WORLD_TO_BOX,
            jointPositionA.y * WORLD_TO_BOX);
    rJoint.localAnchorB.set(jointPositionB.x * WORLD_TO_BOX,
            jointPositionB.y * WORLD_TO_BOX);

    rJoint.enableMotor = enabledMotor;
    rJoint.maxMotorTorque = maxMotorTorque;
    rJoint.motorSpeed = motorSpeed;

    RevoluteJoint joint = (RevoluteJoint) world.createJoint(rJoint);
    return joint;
}
项目:water2d-libgdx    文件:GameMain.java   
private void createBody() {
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;

    // Set our body's starting position in the world
    bodyDef.position.set(Gdx.input.getX() / 100f, camera.viewportHeight - Gdx.input.getY() / 100f);

    // Create our body in the world using our body definition
    Body body = world.createBody(bodyDef);

    // Create a circle shape and set its radius to 6
    PolygonShape square = new PolygonShape();
    square.setAsBox(0.3f, 0.3f);

    // Create a fixture definition to apply our shape to
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = square;
    fixtureDef.density = 0.5f;
    fixtureDef.friction = 0.5f;
    fixtureDef.restitution = 0.5f;

    // Create our fixture and attach it to the body
    body.createFixture(fixtureDef);

    square.dispose();
}
项目:homescreenarcade    文件:WallElement.java   
@Override public void handleCollision(Ball ball, Body bodyHit, Field field) {
    if (retractWhenHit) {
        this.setRetracted(true);
    }

    if (killBall) {
        field.removeBall(ball);
    }
    else {
        Vector2 impulse = this.impulseForBall(ball);
        if (impulse!=null) {
            ball.applyLinearImpulse(impulse);
            flashForFrames(3);
        }
    }
}
项目:homescreenarcade    文件:Box2DFactory.java   
/** Creates a circle object with the given position and radius. Resitution defaults to 0.6. */
public static Body createCircle(World world, float x, float y, float radius, boolean isStatic) {
    CircleShape sd = new CircleShape();
    sd.setRadius(radius);

    FixtureDef fdef = new FixtureDef();
    fdef.shape = sd;
    fdef.density = 1.0f;
    fdef.friction = 0.3f;
    fdef.restitution = 0.6f;

    BodyDef bd = new BodyDef();
    bd.allowSleep = true;
    bd.position.set(x, y);
    Body body = world.createBody(bd);
    body.createFixture(fdef);
    if (isStatic) {
        body.setType(BodyDef.BodyType.StaticBody);
    }
    else {
        body.setType(BodyDef.BodyType.DynamicBody);
    }
    return body;
}
项目:homescreenarcade    文件:Box2DFactory.java   
/**
 * Creates a wall by constructing a rectangle whose corners are (xmin,ymin) and (xmax,ymax),
 * and rotating the box counterclockwise through the given angle, with specified restitution.
 */
public static Body createWall(World world, float xmin, float ymin, float xmax, float ymax,
        float angle, float restitution) {
    float cx = (xmin + xmax) / 2;
    float cy = (ymin + ymax) / 2;
    float hx = Math.abs((xmax - xmin) / 2);
    float hy = Math.abs((ymax - ymin) / 2);
    PolygonShape wallshape = new PolygonShape();
    // Don't set the angle here; instead call setTransform on the body below. This allows future
    // calls to setTransform to adjust the rotation as expected.
    wallshape.setAsBox(hx, hy, new Vector2(0f, 0f), 0f);

    FixtureDef fdef = new FixtureDef();
    fdef.shape = wallshape;
    fdef.density = 1.0f;
    if (restitution>0) fdef.restitution = restitution;

    BodyDef bd = new BodyDef();
    bd.position.set(cx, cy);
    Body wall = world.createBody(bd);
    wall.createFixture(fdef);
    wall.setType(BodyDef.BodyType.StaticBody);
    wall.setTransform(cx, cy, angle);
    return wall;
}
项目:school-game    文件:AttackHandler.java   
/**
 * Erzeugt automatisch einen Kreis als statischen Trigger.
 *
 * @see AttackHandler#createAttackFixture(Body, Shape)
 *
 * @param position der Mittelpunkt des Kreises
 * @param radius der Radius des Kreises
 */
public void createStaticAttackBody(Vector2 position, float radius)
{
    CircleShape circle = new CircleShape();

    circle.setPosition(new Vector2(position.x, position.y).scl(Physics.MPP));
    circle.setRadius(radius * Physics.MPP);

    BodyDef triggerDef = new BodyDef();
    triggerDef.type = BodyDef.BodyType.StaticBody;

    Body trigger = manager.getPhysicalWorld().createBody(triggerDef);

    createAttackFixture(trigger, circle);

    circle.dispose();
}
项目:homescreenarcade    文件:Field2Delegate.java   
@Override public void processCollision(Field field, FieldElement element, Body hitBody, Ball ball) {
    // When center red bumper is hit, start multiball if all center rollovers are lit,
    // otherwise retract left barrier.
    String elementID = element.getElementId();
    if ("CenterBumper1".equals(elementID)) {
        WallElement barrier = (WallElement)field.getFieldElementById("LeftTubeBarrier");
        RolloverGroupElement multiballRollovers =
                (RolloverGroupElement)field.getFieldElementById("ExtraBallRollovers");

        if (multiballRollovers.allRolloversActive()) {
            barrier.setRetracted(false);
            startMultiball(field);
            multiballRollovers.setAllRolloversActivated(false);
        }
        else {
            // don't retract during multiball
            if (field.getBalls().size()==1) {
                barrier.setRetracted(true);
            }
        }
    }
}
项目:homescreenarcade    文件:Field3Delegate.java   
@Override public void processCollision(Field field, FieldElement element, Body hitBody, Ball ball) {
    // Add bumper bonus if active.
    if (element instanceof BumperElement) {
        double extraEnergy = 0;
        if (bumperBonusActive) {
            double fractionRemaining = 1 - (((double) bumperBonusNanosElapsed) / bumperBonusDurationNanos);
            extraEnergy = fractionRemaining * bumperBonusMultiplier;
            // Round score to nearest multiple of 10.
            double bonusScore = element.getScore() * extraEnergy;
            field.addScore(10 * (Math.round(bonusScore / 10)));
        }
        bumperEnergy = Math.min(bumperEnergy + 1 + extraEnergy, maxBumperEnergy);
        double ratio = (bumperEnergy) / maxBumperEnergy;
        field.getFieldElementById("BumperIndicator").setNewColor(colorForTemperatureRatio(ratio));
        checkForEnableMultiball(field);
    }
}
项目:feup-lpoo-armadillo    文件:B2DFactory.java   
/**
 * Creates a pivoted platform from the given object, at the given world.
 *
 * @param world  The world were the platform will be.
 * @param object The object used to initialize the platform.
 * @return The Platform Model of the created platform.
 */
static PlatformModel makePlatform(World world, RectangleMapObject object) {
    PlatformModel platform = new PlatformModel(world, object);

    Boolean pivoted = object.getProperties().get("pivoted", boolean.class);
    if (pivoted != null && pivoted == true) {
        Rectangle rect = object.getRectangle();
        RectangleMapObject anchorRect = new RectangleMapObject(
                rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2, 1, 1
        );
        Body anchor = makeRectGround(world, anchorRect);

        RevoluteJointDef jointDef = new RevoluteJointDef();
        jointDef.initialize(anchor, platform.getBody(), platform.getBody().getWorldCenter());
        world.createJoint(jointDef);
    }

    return platform;
}
项目:feup-lpoo-armadillo    文件:B2DFactory.java   
/**
 * Creates polygon ground from the given object, at the given world.
 *
 * @param world  The world were the ground will be.
 * @param object The object used to initialize the ground.
 * @return The body of the created ground.
 */
static Body makePolygonGround(World world, PolygonMapObject object) {
    Polygon polygon = object.getPolygon();

    // Body and Fixture variables
    BodyDef bdef = new BodyDef();
    FixtureDef fdef = new FixtureDef();
    PolygonShape shape = new PolygonShape();

    bdef.type = BodyDef.BodyType.StaticBody;
    bdef.position.set(PIXEL_TO_METER * polygon.getX(), PIXEL_TO_METER * polygon.getY());

    Body body = world.createBody(bdef);

    float[] new_vertices = polygon.getVertices().clone();
    for (int i = 0; i < new_vertices.length; i++)
        new_vertices[i] *= PIXEL_TO_METER;

    shape.set(new_vertices);
    fdef.shape = shape;
    fdef.filter.categoryBits = GROUND_BIT;
    body.createFixture(fdef);

    return body;
}
项目:feup-lpoo-armadillo    文件:B2DFactory.java   
/**
 * Creates rectangular ground from the given object, at the given world.
 *
 * @param world  The world were the ground will be.
 * @param object The object used to initialize the ground.
 * @return The body of the created ground.
 */
static Body makeRectGround(World world, RectangleMapObject object) {
    Rectangle rect = object.getRectangle();

    // Body and Fixture variables
    BodyDef bdef = new BodyDef();
    FixtureDef fdef = new FixtureDef();
    PolygonShape shape = new PolygonShape();

    bdef.type = BodyDef.BodyType.StaticBody;
    bdef.position.set(PIXEL_TO_METER * (rect.getX() + rect.getWidth() / 2), PIXEL_TO_METER * (rect.getY() + rect.getHeight() / 2));

    Body body = world.createBody(bdef);

    shape.setAsBox((rect.getWidth() / 2) * PIXEL_TO_METER, (rect.getHeight() / 2) * PIXEL_TO_METER);
    fdef.shape = shape;
    fdef.filter.categoryBits = GROUND_BIT;
    body.createFixture(fdef);

    return body;
}
项目:feup-lpoo-armadillo    文件:BallModel.java   
/**
 * Logic associated to the Ball.
 * Controls the Ball's current state, making it jump if on the ground, making it dunk if flying.
 */
public void jump() {
    Body body = getBody();
    switch (this.state) {
        case LANDED:
            body.applyLinearImpulse(new Vector2(0, jump_force), body.getWorldCenter(), true);
            this.state = State.FLYING;
            break;
        case FLYING:
            body.applyLinearImpulse(new Vector2(0, -1.5f * jump_force), body.getWorldCenter(), true);
            this.state = State.DUNKING;
            break;
        case DUNKING:
            // Do nothing
            break;
        default:
            System.err.println("Unhandled state in BallEntity");
    }
}
项目:GDX-Engine    文件:PhysicsManager.java   
/**
    * Create static body from a TiledObject Refer the box2d manual to
    * understand the static body
    * 
    * @param o
    *            TiledObject
    */
   public Body createStaticCircleBody(float x, float y, float radius) {
BodyDef groundBodyDef = new BodyDef();
groundBodyDef.type = BodyType.StaticBody;
// transform into box2d
x = x * WORLD_TO_BOX;
// get position-y of object from map
y = Gdx.graphics.getHeight() - y;
// transform into box2d
y = y * WORLD_TO_BOX;

groundBodyDef.position.set(x, y);
Body groundBody = world.createBody(groundBodyDef);
CircleShape shape = new CircleShape();
((CircleShape) shape).setRadius(radius * WORLD_TO_BOX / 2);
groundBody.createFixture(shape, 0.0f);
groundBody.setUserData("static");
return groundBody;
   }
项目:school-game    文件:AttackHandler.java   
/**
 * Erzeugt automatisch aus einem MapObject einen statischen Trigger.
 *
 * @see AttackHandler#createAttackFixture(Body, Shape)
 *
 * @param mapObject das MapObject
 */
public void createStaticAttackBody(MapObject mapObject)
{
    Shape shape = PhysicsTileMapBuilder.createShape(mapObject, PhysicsTileMapBuilder.TYPE_TRIGGER);

    if (shape == null)
    {
        Gdx.app.log("WARNING", "Unkown trigger type! The attack object " + mapObject.getName() + " will be ignored!");
        return;
    }

    BodyDef triggerDef = new BodyDef();
    triggerDef.type = BodyDef.BodyType.StaticBody;

    Body trigger = manager.getPhysicalWorld().createBody(triggerDef);

    createAttackFixture(trigger, shape);

    shape.dispose();
}
项目:GDX-Engine    文件:PhysicsManager.java   
/**
    * Apply a force to physics object with a force apply position
    * 
    * @param data
    * @param force
    * @param applyPoint
    */
   protected void applyForce(IPhysicsObject data, Vector2 force,
    Vector2 applyPoint) {
Iterator<Body> bi = world.getBodies();
while (bi.hasNext()) {
    Body b = bi.next();
    IPhysicsObject e;
    try {
    e = (IPhysicsObject) b.getUserData(); // get the IPhysicsObject
    } catch (Exception ex) {
    e = null;
    }
    if (e != null) {
    if (e == data) {
        if (applyPoint == null)
        b.applyForceToCenter(force);
        else
        b.applyForce(force, applyPoint);
    }
    }
}
   }
项目:GDX-Engine    文件:PhysicsTiledScene.java   
public Body createTempBody(float x, float y, FixtureDef fixtureDef) {
    // Dynamic Body
    BodyDef bodyDef = new BodyDef();
    if (box2dDebug)
        bodyDef.type = BodyType.StaticBody;
    else
        bodyDef.type = BodyType.DynamicBody;

    // transform into box2d
    x = x * WORLD_TO_BOX;
    y = y * WORLD_TO_BOX;

    bodyDef.position.set(x, y);

    Body body = world.createBody(bodyDef);

    Shape shape = new CircleShape();
    ((CircleShape) shape).setRadius(1 * WORLD_TO_BOX);

    if (fixtureDef == null)
        throw new GdxRuntimeException("fixtureDef cannot be null!");
    fixtureDef.shape = shape;
    body.createFixture(fixtureDef);
    return body;
}
项目:GDX-Engine    文件:PhysicsManager.java   
/**
    * create Revolute Joint
    */
   public RevoluteJoint createRevoluteJoint(Body bodyA, Body bodyB,
    Vector2 jointPositionA, Vector2 jointPositionB,
    boolean enabledMotor, int maxMotorTorque, int motorSpeed) {
RevoluteJointDef rJoint = new RevoluteJointDef();
rJoint.bodyA = bodyA;
rJoint.bodyB = bodyB;
rJoint.localAnchorA.set(jointPositionA.x * WORLD_TO_BOX,
    jointPositionA.y * WORLD_TO_BOX);
rJoint.localAnchorB.set(jointPositionB.x * WORLD_TO_BOX,
    jointPositionB.y * WORLD_TO_BOX);

rJoint.enableMotor = enabledMotor;
rJoint.maxMotorTorque = maxMotorTorque;
rJoint.motorSpeed = motorSpeed;

RevoluteJoint joint = (RevoluteJoint) world.createJoint(rJoint);
return joint;
   }
项目:GDX-Engine    文件:PhysicsManager.java   
public Body createTempBodyDistanceJoint(Body bodyA, Body bodyB,
    Vector2 localA, Vector2 localB, int length) {
DistanceJointDef dJoint = new DistanceJointDef();
FixtureDef fixtureDef = createFixtureDef(1f, 0.5f, 0.2f, (short) 0x0004);
IPhysicsObject sprite = (IPhysicsObject) bodyA.getUserData();
Body temp = createTempBody(sprite.getX(), sprite.getY(), fixtureDef);
createRevoluteJoint(bodyA, temp, localA, Vector2.Zero);
dJoint.bodyA = temp;
dJoint.bodyB = bodyB;
dJoint.localAnchorA.set(localA.x * WORLD_TO_BOX, localA.y
    * WORLD_TO_BOX);
dJoint.localAnchorB.set(localB.x * WORLD_TO_BOX, localB.y
    * WORLD_TO_BOX);
dJoint.length = length * WORLD_TO_BOX;
world.createJoint(dJoint);
return temp;
   }
项目:GDX-Engine    文件:Rope.java   
private void createRope(Body bodyA, Vector2 anchorA, Body bodyB, Vector2 anchorB, float sag, AtlasRegion ropeRegion)
{
    RopeJointDef jd = new RopeJointDef();
    jd.bodyA = bodyA;
    jd.bodyB = bodyB;
    jd.localAnchorA.set(anchorA.x, anchorA.y);
    jd.localAnchorB.set(anchorB.x, anchorB.y);      
    // Max length of joint = current distance between bodies * sag
    float ropeLength =  bodyA.getWorldPoint(anchorA).sub(bodyB.getWorldPoint(anchorB)).len() * sag;
    jd.maxLength = ropeLength;

    // Create joint
    RopeJoint joint = (RopeJoint)world.createJoint(jd);
    GdxRopeJoint ropeJoint = new GdxRopeJoint(joint, jd.localAnchorA, jd.localAnchorB);

    VRope newRope = new VRope(ropeJoint, this, ropeRegion);

    ropes.add(newRope);
}
项目:GDX-Engine    文件:Rope.java   
private Body createRopeTipBody()
{
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.linearDamping = 0.5f;
    Body body = world.createBody(bodyDef);

    FixtureDef circleDef = new FixtureDef();
    CircleShape circle = new CircleShape();
    circle.setRadius(1.0f/PTM_RATIO);
    circleDef.shape = circle;
    circleDef.density = 10.0f;

    // Since these tips don't have to collide with anything
    // set the mask bits to zero
    circleDef.filter.maskBits = 0x01; //0;
    body.createFixture(circleDef);

    return body;
}
项目:GDX-Engine    文件:Rope.java   
public void cutTheRobe(Vector2 pt0, Vector2 pt1)
{
    for (VRope rope : ropes)
    {
        for (VStick stick : rope.vSticks)
        {
            Vector2 pa = stick.getPointA().point();
            Vector2 pb = stick.getPointB().point();
            if (checkLineIntersection(pt0, pt1, pa, pb))
            {
                Body newBodyA = createRopeTipBody();
                Body newBodyB = createRopeTipBody();

                VRope newRope = rope.cutRopeInStick(stick, newBodyA, newBodyB);
                ropes.add(newRope);

                return;
            }
        }
    }
}
项目:GDX-Engine    文件:PhysicsTiledScene.java   
/**
 * Create static body from a TiledObject Refer the box2d manual to
 * understand the static body
 * 
 * @param o
 *            TiledObject
 */
public Body createStaticBoxBody(float x, float y, float width, float height) {
    BodyDef groundBodyDef = new BodyDef();
    groundBodyDef.type = BodyType.StaticBody;

    // transform into box2d
    x = x * WORLD_TO_BOX;

    // get position-y from map
    y = tileMapRenderer.getMapHeightUnits() - y;
    // transform into box2d
    y = y * WORLD_TO_BOX;

    groundBodyDef.position.set(x, y);
    Body groundBody = world.createBody(groundBodyDef);
    PolygonShape polygon = new PolygonShape();
    ((PolygonShape) polygon).setAsBox(width * WORLD_TO_BOX / 2, height
            * WORLD_TO_BOX / 2);
    groundBody.createFixture(polygon, 0.0f);
    groundBody.setUserData("static");
    return groundBody;
}
项目:GDX-Engine    文件:PhysicsTiledScene.java   
/**
 * Create static body from a TiledObject Refer the box2d manual to
 * understand the static body
 * 
 * @param o
 *            TiledObject
 */
public Body createStaticCircleBody(float x, float y, float radius) {
    BodyDef groundBodyDef = new BodyDef();
    groundBodyDef.type = BodyType.StaticBody;
    // transform into box2d
    x = x * WORLD_TO_BOX;
    // get position-y of object from map
    y = tileMapRenderer.getMapHeightUnits() - y;
    // transform into box2d
    y = y * WORLD_TO_BOX;

    groundBodyDef.position.set(x, y);
    Body groundBody = world.createBody(groundBodyDef);
    CircleShape shape = new CircleShape();
    ((CircleShape) shape).setRadius(radius * WORLD_TO_BOX / 2);
    groundBody.createFixture(shape, 0.0f);
    groundBody.setUserData("static");
    return groundBody;
}
项目:GDX-Engine    文件:PhysicsTiledScene.java   
/**
 * Apply a force to physics object with a force apply position
 * 
 * @param data
 * @param force
 * @param applyPoint
 */
protected void applyForce(IPhysicsObject data, Vector2 force,
        Vector2 applyPoint) {
    Iterator<Body> bi = world.getBodies();
    while (bi.hasNext()) {
        Body b = bi.next();
        IPhysicsObject e;
        try {
            e = (IPhysicsObject) b.getUserData(); // get the IPhysicsObject
        } catch (Exception ex) {
            e = null;
        }
        if (e != null) {
            if (e == data) {
                if (applyPoint == null)
                    b.applyForceToCenter(force);
                else
                    b.applyForce(force, applyPoint);
            }
        }
    }
}
项目:FlappySpinner    文件:WorldUtils.java   
public static Array<Body> createTopTube(World world, float posX) {

        float posY = generateTubePosition();

        BodyDef bodyDef = new BodyDef();
        bodyDef.type = BodyDef.BodyType.KinematicBody;
        bodyDef.position.set(posX, posY);
        PolygonShape shape = new PolygonShape();
        shape.setAsBox(Constants.TUBE_WIDTH / 2, Constants.TUBE_HEIGHT / 2);
        Body bodyTop = world.createBody(bodyDef);
        bodyTop.createFixture(shape, 0f);
        bodyTop.resetMassData();
        shape.dispose();
        bodyTop.setLinearVelocity(Constants.TUBE_SPEED, 0.0f);
        Array<Body> bodies = new Array<Body>();
        bodies.add(bodyTop);
        bodies.add(createBottomTube(world, posX, posY));
        return bodies;
    }
项目:school-game    文件:BaseEntity.java   
/**
 * Erlaubt es den Unterklassen möglichst einfach einen beliebigen Box2D Körper zu erstellen.
 *
 * @param position die Startposition des Body
 * @param shape die Form, die für dne Body verwendet werden soll
 * @param type der Typ des Körpers
 * @return ein Box2D Körper
 */
protected Body createEntityBody(Vector2 position, Shape shape, BodyDef.BodyType type)
{
    position.scl(Physics.MPP);

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = type;
    bodyDef.position.set(position);
    bodyDef.fixedRotation = true;

    Body body = worldObjectManager.getPhysicalWorld().createBody(bodyDef);
    body.setUserData(this);

    FixtureDef fixture = new FixtureDef();
    fixture.shape = shape;
    fixture.filter.categoryBits = Physics.CATEGORY_ENTITIES;
    fixture.filter.maskBits = Physics.MASK_ENTITIES;

    body.createFixture(fixture).setUserData(this);

    shape.dispose();

    return body;
}
项目:school-game    文件:AttackHandler.java   
/**
 * Erzeugt aus einer Form ein Fixture und fügt dieses einem Körper hinzu.
 * Das Fixture wird als Trigger für Angriffe benutzt.
 *
 * @param body der Körper
 * @param shape die Form
 */
public void createAttackFixture(Body body, Shape shape)
{
    FixtureDef fixture = new FixtureDef();
    fixture.shape = shape;
    fixture.isSensor = true;
    fixture.filter.categoryBits = Physics.CATEGORY_TRIGGER;
    fixture.filter.maskBits = Physics.MASK_TRIGGER;

    body.createFixture(fixture).setUserData(this);
}
项目:GDX-Engine    文件:Bird.java   
@Override
   public boolean onTouchUp(TouchEvent e) {
if (status != Status.touched) {
    return true;
}
// If mouse is up when dragging the bird
// fire the bird
float distanceX = getCenterX() - sling.getCenterX();
float distanceY = getCenterY() - sling.getCenterY();
// Here we have velocityX and velocityY of bird
float velocityX = distanceX * -1 / 5;
float velocityY = distanceY * -1 / 5;
Vector2 birdVelocity = new Vector2(velocityX, velocityY);
// get PhysicManager from gameService
PhysicsManager physicsManager = getGameService().getService(
    PhysicsManager.class);
// create new physicObject in physicsManager
Body birdBody = physicsManager.addDynamicCircleObject(this,
    getRegionWidth() / 2, 4f, 0.8f, 0.5f);
// Set above velocity for the bird body
birdBody.setLinearVelocity(birdVelocity);
// set bullet, it will make game run preciously
birdBody.setBullet(true);
// update the bird's status
status = Status.released;
return false;
   }
项目:homescreenarcade    文件:Box2DFactory.java   
/** Creates a segment-like thin wall with 0.05 thickness going from (x1,y1) to (x2,y2) */
public static Body createThinWall(World world, float x1, float y1, float x2, float y2, float restitution) {
    // Determine center point and rotation angle for createWall.
    float cx = (x1 + x2) / 2;
    float cy = (y1 + y2) / 2;
    float angle = (float)Math.atan2(y2-y1, x2-x1);
    float mag = (float)Math.hypot(y2-y1, x2-x1);
    return createWall(world, cx - mag/2, cy-0.05f, cx + mag/2, cy+0.05f, angle, restitution);
}
项目:homescreenarcade    文件:DropTargetGroupElement.java   
@Override public void createBodies(World world) {
    for (float[] parray : positions) {
        float restitution = 0f;
        Body wallBody = Box2DFactory.createThinWall(
                world, parray[0], parray[1], parray[2], parray[3], restitution);
        allBodies.add(wallBody);
    }
}
项目:GDX-Engine    文件:PhysicsTiledScene.java   
public RevoluteJoint createRevoluteJoint(Body bodyA, Body bodyB,
        Vector2 jointPositionA, Vector2 jointPositionB) {
    RevoluteJointDef rJoint = new RevoluteJointDef();
    rJoint.bodyA = bodyA;
    rJoint.bodyB = bodyB;
    rJoint.localAnchorA.set(jointPositionA.x * WORLD_TO_BOX,
            jointPositionA.y * WORLD_TO_BOX);
    rJoint.localAnchorB.set(jointPositionB.x * WORLD_TO_BOX,
            jointPositionB.y * WORLD_TO_BOX);
    RevoluteJoint joint = (RevoluteJoint) world.createJoint(rJoint);
    return joint;
}
项目:FlappySpinner    文件:WorldUtils.java   
public static Body createSky(World world) {
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyDef.BodyType.StaticBody;
    bodyDef.position.set(0, Constants.HEIGHT);
    Body body = world.createBody(bodyDef);
    PolygonShape shape = new PolygonShape();
    shape.setAsBox(Constants.GROUND_SIZE.x, 0);
    body.createFixture(shape, 0f);
    shape.dispose();
    return body;
}
项目:homescreenarcade    文件:DropTargetGroupElement.java   
@Override public void draw(IFieldRenderer renderer) {
    // draw line for each target
    Color color = currentColor(DEFAULT_COLOR);
    int bsize = allBodies.size();
    for(int i=0; i<bsize; i++) {
        Body body = allBodies.get(i);
        if (body.isActive()) {
            float[] parray = positions[i];
            renderer.drawLine(parray[0], parray[1], parray[2], parray[3], color);
        }
    }
}
项目:homescreenarcade    文件:Field.java   
private Ball ballWithBody(Body body) {
    for (int i=0; i<this.balls.size(); i++) {
        Ball ball = this.balls.get(i);
        if (ball.getBody() == body) {
            return ball;
        }
    }
    return null;
}
项目:GDX-Engine    文件:PhysicsTiledScene.java   
/**
 * Create mouse joint with default ground body, target body and location on target body
 * @param targetBody
 * @param locationWorld
 * @return
 */
public MouseJoint createMouseJoint(Body targetBody, Vector2 locationWorld){

    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.position.set(new Vector2(locationWorld.x * WORLD_TO_BOX, locationWorld.y * WORLD_TO_BOX));
    bodyDef.linearDamping = 0.3f;
    Body body = world.createBody(bodyDef);

       return createMouseJoint(body, targetBody, locationWorld);
}
项目:homescreenarcade    文件:Field2Delegate.java   
public void applyRotation(Field field, double dt) {
    currentAngle += dt*rotationSpeed;
    if (currentAngle>TAU) currentAngle -= TAU;
    if (currentAngle<0) currentAngle += TAU;
    for(int i=0; i<elementIDs.length; i++) {
        double angle = currentAngle + angleIncrement*i;

        FieldElement element = field.getFieldElementById(elementIDs[i]);
        Body body = element.getBodies().get(0);
        double x = centerX + radius*Math.cos(angle);
        double y = centerY + radius*Math.sin(angle);
        body.setTransform((float)x, (float)y, body.getAngle());
    }
}
项目:FlappySpinner    文件:Tube.java   
public Tube(Array<Body> bodies) {
    random = new Random();

    topTubeTexture = AssetsManager.getTextureRegion(Constants.TOP_TUBE_NAME);
    bottomTubeTexture = AssetsManager.getTextureRegion(Constants.BOTTOM_TUBE_NAME);

    topTubeBody = bodies.first();//first item
    bottomTubeBody = bodies.peek();//last item
}
项目:Race99    文件:BodyCreator.java   
public Body createBody(Vector2 position, Texture texture, BodyDef.BodyType bodyType, World world, Shape.Type shape, Vector3 densityRestitutionFriction) {
    this.texture = texture;
    bodyDef = createBodyDef(bodyType, position);
    body = world.createBody(bodyDef);
    FixtureCreator.createFixture(body, createShape(shape), densityRestitutionFriction);
    return body;
}
项目:DarkDay    文件:B2dSteeringEntity.java   
public B2dSteeringEntity(Body body, float boundingRadius) {
    this.body = body;
    this.boundingRadius = boundingRadius;

    this.maxAngularSpeed = 500;
    this.maxLinearAcceleration = 5000;
    this.maxAngularSpeed = 30;
    this.maxAngularAcceleration = 5;
    this.tagged = false;

    this.steeringOutput = new SteeringAcceleration<Vector2>(new Vector2());
    this.body.setUserData(this);
}
项目:school-game    文件:BaseEntity.java   
/**
 * Erlaubt es den Unterklassen möglichst einfach einen runden Box2D Körper zu erstellen.
 *
 * @param position die Startposition des Body
 * @param radius der Radius der Form
 * @return ein Box2D Körper
 */
protected Body createCircleBody(Vector2 position, float radius)
{
    CircleShape circle = new CircleShape();

    circle.setPosition(Vector2.Zero);
    circle.setRadius(radius * Physics.MPP);

    return createEntityBody(position, circle);
}