Соединение шкива отскакивает и замедляет мир
Строка json анализируется и значения передаются в соответствующие классы Java.no-args
конструктор вызывается для каждого объекта, как я использую Gson
,
Я тогда звоню pulley.init(world);
на самом деле добавить объект в мир.
Проблема в том, что объекты анализируются и загружаются в мир Box2d.Pulley
присутствует, есть 2 коробки с линией, соединяющей их.
Когда сцена загружена, шкив медленно падает с неба.
Затем он внезапно выпрыгивает из поля зрения, и весь мир становится ужасно медленным.
Это настройка правильно для Pulley
совместный? Я не знаю, почему сустав вылетает из поля зрения и вызывает это ухудшение качества.
определение объекта json..
"pulleys":[
{
"anchorA_Low": 2.0,
"anchorB_Low": 2.0,
"anchorA_High": 10.0,
"anchorB_High": 10.0,
"ratio": 2.0,
"shapeA": {
"position": {
"x": -30.0,
"y": 10.0
},
"angle": 0.0,
"width": 1.0,
"height": 1.0,
"bodyType": "DYNAMIC",
"density": 5.0,
"friction": 0.0,
"restitution": 0.0,
},
"shapeB": {
"position": {
"x": -10.0,
"y": 10.0
},
"angle": 0.0,
"width": 1.0,
"height": 1.0,
"bodyType": "DYNAMIC",
"density": 5.0,
"friction": 0.0,
"restitution": 0.0,
}
}
]
Класс Java для Pulley
объект.
public class Pulley extends Joint{
private Vec2 groundAnchorA;
private Vec2 groundAnchorB;
private Vec2 anchorA;
private Vec2 anchorB;
private float anchorA_Low;
private float anchorB_Low;
private float anchorA_High;
private float anchorB_High;
private float ratio;
public Pulley() {}
public void init(World world){
Body bodyA = getShapeA().setupShape(world);
Body bodyB = getShapeB().setupShape(world);
IAEdge edge = new IAEdge(bodyA.getPosition(), bodyB.getPosition());
edge.init(world);
anchorA = new Vec2(bodyA.getPosition().x, bodyA.getPosition().y + anchorA_Low);
anchorB = new Vec2(bodyB.getPosition().x, bodyB.getPosition().y + anchorB_Low);
groundAnchorA = new Vec2(bodyA.getPosition().x, bodyA.getPosition().y + anchorA_Low + anchorA_High);
groundAnchorB = new Vec2(bodyB.getPosition().x, bodyB.getPosition().y + anchorB_Low + anchorB_High);
PulleyJointDef pulleyDef = new PulleyJointDef();
pulleyDef.initialize(bodyA, bodyB, groundAnchorA, groundAnchorB, anchorA, anchorB, ratio);
world.createJoint(pulleyDef);
}
public Body setupShape(World world){
PolygonShape blockShape = new PolygonShape();
blockShape.setAsBox(getWidth() / 2, getHeight() / 2);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = blockShape;
fixtureDef.density = getDensity();
fixtureDef.friction = getFriction();
fixtureDef.restitution = getRestitution();
BodyDef bodydef = new BodyDef();
bodydef.type = BodyType.valueOf(getBodyType());
bodydef.position.set(getPosition().x, getPosition().y);
bodydef.angle = getAngle();
Body body = world.createBody(bodydef);
body.createFixture(fixtureDef);
return body;
}
}
Java-класс для инкапсуляции EdgeShape в Box2d.
public class IAEdge {
private Vec2 pointA;
private Vec2 pointB;
public IAEdge(){}
public IAEdge(Vec2 pointA, Vec2 pointB){
setPointA(pointA);
setPointB(pointB);
}
public Body init(Level level) {
BodyDef bd = new BodyDef();
Body ground = level.createBody(bd);
bd.position.set(
new Vec2(
((pointA.x + pointB.x) / 2),
(pointA.y + pointB.y) / 2));
EdgeShape shape = new EdgeShape();
shape.set(
new Vec2(pointA.x, pointA.y),
new Vec2(pointB.x, pointB.y));
ground.createFixture(shape, 0.0f);
return ground;
}
}
1 ответ
Решение