나는 box2dweb을 사용하여 2D에서 자동차와 비슷한 것을 만들려고합니다. 나는 차체와 두 개의 동그라미를위한 상자를 가지고 있는데, 바퀴와 같이 회전 조인트에 의해 연결되어있다. 모든 것이 잠시 동안 잘 작동하지만 바퀴의 중심과 부착 된 상자의 점 사이에 간격이 점차 커집니다. 솔버에 대한 반복을 더 많이 설정해도 도움이되지 않으며 조만간 바퀴가 상자에서 완전히 빠져 나옵니다. 그것은 어떤 종류의 누적 된 오류처럼 보입니다. 또한 바퀴가 충돌하여 땅에 충돌하는 것이이 문제의 가장 큰 원인입니다. 처음에는 왼쪽 그림에서처럼,하지만 난 바닥에 큰 공을 통해 몇 번을 운전 한 후, 그 방법 우측 그림에서와 같이 가져오고 유지 : 내가 사용Box2dWeb 회전 조인트 "stretching"
을 이전 box2djs 라이브러리 이전에이 문제가있는 것 같지 않았습니다. 문제는 내가 코드를 box2dweb에 이식 한 후에 나타났습니다. 이 두 도서관에서 일들이 어떻게 만들어지는 지에는 몇 가지 차이점이 있습니다. 그래서 나는 뭔가를 놓쳤을 것입니다. 그러나 무엇을 모르겠습니다.
상자의 코드 : 바퀴를 들어
function createBox(world, x, y, width, height)
{
var fixDef = new b2FixtureDef;
fixDef.density = 1.0;
fixDef.friction = 1.0;
fixDef.restitution = 1.0;
var bodyDef = new b2BodyDef;
bodyDef.type = b2Body.b2_dynamicBody;
bodyDef.position.x = x;
bodyDef.position.y = y;
fixDef.shape = new b2PolygonShape;
fixDef.shape.SetAsBox(width, height);
var b = world.CreateBody(bodyDef);
b.CreateFixture(fixDef);
return b;
}
(거의 같은,이 생성을 제외하고 원) : 그래서
var jointDef_rear = new b2RevoluteJointDef();
jointDef_rear.Initialize(rear_wheel, car_body, rear_wheel.GetPosition());
jointDef_rear.maxMotorTorque = 10.0;
jointDef_rear.enableMotor = true;
rear_joint = world.CreateJoint(jointDef_rear);
var jointDef_front = new b2RevoluteJointDef();
jointDef_front.Initialize(front_wheel, car_body, front_wheel.GetPosition());
jointDef_front.maxMotorTorque = 10.0;
jointDef_front.enableMotor = true;
front_joint = world.CreateJoint(jointDef_front);
:
function createBall(world, x, y, r)
{
var fixDef = new b2FixtureDef;
fixDef.density = 1.0;
fixDef.friction = 1.0;
fixDef.restitution = 1.0;
var bodyDef = new b2BodyDef;
bodyDef.type = b2Body.b2_dynamicBody;
bodyDef.position.x = x;
bodyDef.position.y = y;
fixDef.shape = new b2CircleShape(r);
var b = world.CreateBody(bodyDef);
b.CreateFixture(fixDef);
return b;
}
그리고 관절
"내 코드가 뭐가 잘못 됐냐"고 묻는 것이 싫어 .- 내가 뭘 잘못 했니?
코드를 업로드하여 실전에서 볼 수 있습니까? – Shekhar
예. http://lazunin.com/ask/rotate.html 스트레칭을 보는 가장 빠른 방법은 "A"와 "D"키를 여러 번 사용하여 앞바퀴를 땅바닥에 대고 타는 것입니다 (ASD는 뒷바퀴를 제어합니다, JKL - 앞 바퀴. 여기 http://lazunin.com./poro/box2dweb 대신 box2djs를 사용하고 전혀 스트레칭을하지 않는 또 다른 예가 있습니다 – Headcrab