本文整理汇总了Java中org.jbox2d.dynamics.joints.DistanceJointDef类的典型用法代码示例。如果您正苦于以下问题:Java DistanceJointDef类的具体用法?Java DistanceJointDef怎么用?Java DistanceJointDef使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
DistanceJointDef类属于org.jbox2d.dynamics.joints包,在下文中一共展示了DistanceJointDef类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: createDistanceJoint
import org.jbox2d.dynamics.joints.DistanceJointDef; //导入依赖的package包/类
public Joint createDistanceJoint(Body body1, Body body2, float distance) {
DistanceJointDef jointDef = new DistanceJointDef();
jointDef.initialize(body1, body2, body1.getPosition(), body2.getPosition());
jointDef.length = distance;
jointDef.frequencyHz = 4;
jointDef.dampingRatio = 0.1f;
jointDef.collideConnected = true;
return (DistanceJoint) physicsWorld.createJoint(jointDef);
}
示例2: createChain
import org.jbox2d.dynamics.joints.DistanceJointDef; //导入依赖的package包/类
public void createChain(Vec2 ankerA, Vec2 ankerB, float radius, float spacing){
Vec2 AB = ankerB.sub(ankerA);
float distance = AB.length();
int count = 1 + (int) (distance / (radius * 2 + spacing));
float dist = distance / (count-1);
Vec2 step = AB.mul(dist / distance);
CircleShape cshape = new CircleShape();
cshape.m_p.set(0,0);
cshape.m_radius = radius;
int col = color(255);
Body body_prev = null;
for(int i = 0; i < count; i++){
BodyDef bdef = new BodyDef();
bdef.position = ankerA.add(step.mul(i));
if(i == 0 || i == count-1 || i % 20 == 0){
bdef.type = BodyType.STATIC;
} else {
bdef.type = BodyType.DYNAMIC;
}
Body body_curr = world.createBody(bdef);
body_curr.createFixture(cshape, 0);
world.bodies.add(body_curr, true, col, true, 0xFF000000, 1f);
if(body_prev != null){
DistanceJointDef djointdef = new DistanceJointDef();
djointdef.initialize(body_prev, body_curr, body_prev.m_xf.p, body_curr.m_xf.p);
djointdef.dampingRatio = 0.3f;
djointdef.frequencyHz = 15f;
DistanceJoint djoint = (DistanceJoint) world.createJoint(djointdef);
world.bodies.add(djoint, false, col, true, col, 5);
}
body_prev = body_curr;
}
}
示例3: doSomethingWithCollisionContactsAndDistanceJoints
import org.jbox2d.dynamics.joints.DistanceJointDef; //导入依赖的package包/类
public void doSomethingWithCollisionContactsAndDistanceJoints(){
DistanceJointDef djd = new DistanceJointDef();
djd.dampingRatio = 0.5f;
djd.frequencyHz = 20.0f;
djd.collideConnected = false; // default anyways
// RopeJointDef rjd = new RopeJointDef();
// iterate through all contacts since the previous world-update-step
for(Contact contact = world.getContactList(); contact != null; contact = contact.m_next){
// both bodies of the contact
Body bodyA = contact.m_fixtureA.getBody();
Body bodyB = contact.m_fixtureB.getBody();
// ignore contaxt with static bodies
if(bodyA.m_type == BodyType.STATIC || bodyB.m_type == BodyType.STATIC ){
continue;
}
// body world positions
Vec2 posA = bodyA.getTransform().p;
Vec2 posB = bodyB.getTransform().p;
// create joint bodyA <-> bodyB
djd.initialize(bodyA, bodyB, posA, posB);
Joint joint = world.createJoint(djd);
// Vec2 distAB = posA.sub(posB);
//
// rjd.bodyA = bodyA;
// rjd.bodyB = bodyB;
// rjd.localAnchorA.set(bodyA.getLocalPoint(posA));
// rjd.localAnchorB.set(bodyB.getLocalPoint(posB));
// rjd.maxLength = distAB.length();
// Joint joint = world.createJoint(rjd);
// add joint shape and a style
DwJoint dwjoint = world.bodies.add(joint, false, color(0), true, color(255, 160), 1.0f);
// // replace the line shape with a rectangle shape
// // to apply a color transition for the joint.
// // unfortunately this doesnt work for a line, only for a Polygon, like a rectangle.
// DwFixture fA = DwWorld.getShape(contact.m_fixtureA);
// DwFixture fB = DwWorld.getShape(contact.m_fixtureB);
//
// float h = 1f / world.transform.screen_scale;
//
// PShape shape_rect = createShape();
// shape_rect.beginShape(QUADS);
// shape_rect.noStroke();
// shape_rect.fill(fA.shape.getFill(0));
// shape_rect.vertex(0,-h);
// shape_rect.vertex(0,+h);
// shape_rect.fill(fB.shape.getFill(0));
// shape_rect.vertex(1,+h);
// shape_rect.vertex(1,-h);
// shape_rect.endShape();
//
// dwjoint.replaceShape(shape_rect);
}
}