Я играл с коробкой kripken box2d, когда у меня была пара проблем. Я выбрал эту вилку, потому что она кажется самой быстрой и самой используемой.Box2d.js импульсы/силы и начальное положение
- API определяет положение на bodyDef, но вы должны «дать ему на тело».
- Силы, импульсы, ... прикрепляются к телу, давая неожиданную постоянную скорость.
Есть ли у кого-нибудь эти поведения раньше? У кого-нибудь есть намеки?
Это происходит из сложного приложения, но я упростил для демонстрации:
<html>
<head>
<script src="http://kripken.github.io/box2d.js/box2d.js"></script>
</head>
<body>
<script>
// gravity 0 for top view scene
var world = new Box2D.b2World(new Box2D.b2Vec2(0, 0), true);
var bodyDef = new Box2D.b2BodyDef();
bodyDef.set_type(Box2D.b2_dynamicBody);
bodyDef.set_position(40,40);
var body = world.CreateBody(bodyDef);
// ISSUE 1
// without these two lines real position is 0,0
body.GetPosition().set_x(40);
body.GetPosition().set_y(40);
var dynamicBox = new Box2D.b2PolygonShape();
dynamicBox.SetAsBox(5.0, 5.0);
var fixtureDef = new Box2D.b2FixtureDef();
fixtureDef.set_shape(dynamicBox);
fixtureDef.set_density(1);
fixtureDef.set_friction(0.8);
fixtureDef.set_restitution(0.5);
body.CreateFixture(fixtureDef);
//ISSUE 2
// Never ending movements
//body.ApplyLinearImpulse(new Box2D.b2Vec2(5,5),body.GetWorldCenter());
body.ApplyForce(new Box2D.b2Vec2(50,50),body.GetWorldCenter());
function update() {
world.Step(1/30, 10, 10);
world.ClearForces();
console.log(body.GetPosition().get_x()+","+body.GetPosition().get_x());
}
setInterval(update, 1000/60);
</script>
</body>
</html>