Tôi đang cố gắng tạo ra một cơ thể động quay xung quanh một thân tĩnh trong Box2D. Tôi có một thế giới không trọng lực và DistanceJoint
kết nối hai vật thể. Tôi đã loại bỏ tất cả ma sát và giảm chấn từ các cơ quan và khớp, và đang áp dụng một vận tốc tuyến tính ban đầu cho cơ thể động. Kết quả là cơ thể bắt đầu quay quanh, nhưng vận tốc của nó giảm đi theo thời gian - mà tôi không mong đợi trong một môi trường trọng lực bằng không mà không có ma sát.Tốc độ giảm dần trong không trọng lực box2d thế giới
Tôi có làm gì sai không? Nếu tốc độ tuyến tính được tái tạo ở mỗi bước, hoặc tôi có thể giao công việc này cho Box2D?
Đây là mã có liên quan:
// positions of both bodies
Vector2 planetPosition = new Vector2(x1/Physics.RATIO, y1/Physics.RATIO);
Vector2 satellitePosition = new Vector2(x2/Physics.RATIO, y2/Physics.RATIO);
// creating static body
BodyDef planetBodyDef = new BodyDef();
planetBodyDef.type = BodyType.StaticBody;
planetBodyDef.position.set(planetPosition);
planetBodyDef.angularDamping = 0;
planetBodyDef.linearDamping = 0;
planetBody = _world.createBody(planetBodyDef);
CircleShape planetShapeDef = new CircleShape();
planetShapeDef.setRadius(40);
FixtureDef planetFixtureDef = new FixtureDef();
planetFixtureDef.shape = planetShapeDef;
planetFixtureDef.density = 0.7f;
planetFixtureDef.friction = 0;
planetBody.createFixture(planetFixtureDef);
// creating dynamic body
BodyDef satelliteBodyDef = new BodyDef();
satelliteBodyDef.type = BodyType.DynamicBody;
satelliteBodyDef.position.set(satellitePosition);
satelliteBodyDef.linearDamping = 0;
satelliteBodyDef.angularDamping = 0;
satelliteBody = _world.createBody(satelliteBodyDef);
CircleShape satelliteShapeDef = new CircleShape();
satelliteShapeDef.setRadius(10);
FixtureDef satelliteFixtureDef = new FixtureDef();
satelliteFixtureDef.shape = satelliteShapeDef;
satelliteFixtureDef.density = 0.7f;
satelliteFixtureDef.friction = 0;
satelliteBody.createFixture(satelliteFixtureDef);
// create DistanceJoint between bodies
DistanceJointDef jointDef = new DistanceJointDef();
jointDef.initialize(satelliteBody, planetBody, satellitePosition, planetPosition);
jointDef.collideConnected = false;
jointDef.dampingRatio = 0;
_world.createJoint(jointDef);
// set initial velocity
satelliteBody.setLinearVelocity(new Vector2(0, 30.0f)); // orthogonal to the joint
cảm ơn bạn đã giải thích! nó thực sự có ý nghĩa, khi người ta nghĩ về nó về khoa học máy tính, với tất cả các lỗi làm tròn ... Tôi đoán tôi chỉ đơn giản là mong đợi vật lý thuần túy :) –