![JAR search and dependency download from the Maven repository](/logo.png)
org.jbox2d.testbed.tests.RopeTest Maven / Gradle / Ivy
package org.jbox2d.testbed.tests;
import org.jbox2d.collision.shapes.EdgeShape;
import org.jbox2d.collision.shapes.PolygonShape;
import org.jbox2d.common.Vec2;
import org.jbox2d.dynamics.Body;
import org.jbox2d.dynamics.BodyDef;
import org.jbox2d.dynamics.BodyType;
import org.jbox2d.dynamics.FixtureDef;
import org.jbox2d.dynamics.joints.Joint;
import org.jbox2d.dynamics.joints.RevoluteJointDef;
import org.jbox2d.dynamics.joints.RopeJointDef;
import org.jbox2d.testbed.framework.TestbedSettings;
import org.jbox2d.testbed.framework.TestbedTest;
public class RopeTest extends TestbedTest {
RopeJointDef m_ropeDef;
Joint m_rope;
@Override
public void initTest(boolean deserialized) {
if (deserialized) {
return;
}
Body ground = null;
{
BodyDef bd = new BodyDef();
ground = getWorld().createBody(bd);
EdgeShape shape = new EdgeShape();
shape.set(new Vec2(-40.0f, 0.0f), new Vec2(40.0f, 0.0f));
ground.createFixture(shape, 0.0f);
}
{
PolygonShape shape = new PolygonShape();
shape.setAsBox(0.5f, 0.125f);
FixtureDef fd = new FixtureDef();
fd.shape = shape;
fd.density = 20.0f;
fd.friction = 0.2f;
fd.filter.categoryBits = 0x0001;
fd.filter.maskBits = 0xFFFF & ~0x0002;
RevoluteJointDef jd = new RevoluteJointDef();
jd.collideConnected = false;
final int N = 10;
final float y = 15.0f;
m_ropeDef = new RopeJointDef();
m_ropeDef.localAnchorA.set(0.0f, y);
Body prevBody = ground;
for (int i = 0; i < N; ++i) {
BodyDef bd = new BodyDef();
bd.type = BodyType.DYNAMIC;
bd.position.set(0.5f + 1.0f * i, y);
if (i == N - 1) {
shape.setAsBox(1.5f, 1.5f);
fd.density = 100.0f;
fd.filter.categoryBits = 0x0002;
bd.position.set(1.0f * i, y);
bd.angularDamping = 0.4f;
}
Body body = getWorld().createBody(bd);
body.createFixture(fd);
Vec2 anchor = new Vec2(i, y);
jd.initialize(prevBody, body, anchor);
getWorld().createJoint(jd);
prevBody = body;
}
m_ropeDef.localAnchorB.setZero();
float extraLength = 0.01f;
m_ropeDef.maxLength = N - 1.0f + extraLength;
m_ropeDef.bodyB = prevBody;
}
{
m_ropeDef.bodyA = ground;
m_rope = getWorld().createJoint(m_ropeDef);
}
}
@Override
public void keyPressed(char keyChar, int keyCode) {
switch (keyChar) {
case 'j':
if (m_rope != null) {
getWorld().destroyJoint(m_rope);
m_rope = null;
} else {
m_rope = getWorld().createJoint(m_ropeDef);
}
break;
}
}
@Override
public synchronized void step(TestbedSettings settings) {
super.step(settings);
addTextLine("Press (j) to toggle the rope joint.");
m_textLine += 15;
if (m_rope != null) {
addTextLine("Rope ON");
} else {
addTextLine("Rope OFF");
}
}
@Override
public String getTestName() {
return "Rope Joint";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy