没有重力的小JavaScript Box2D程序会让物体移动。。。为什么?

没有重力的小JavaScript Box2D程序会让物体移动。。。为什么?,javascript,box2d,Javascript,Box2d,我有一个小的Box2D东西(使用box2dweb.js),但是尽管将重力设置为(0,0),并且没有对任何对象施加力/脉冲,但当我开始绘制循环时,场景中唯一的动态形状会移动。我不知道为什么 有人知道为什么击球后“球”会移动吗 相关代码位为: // shortcut aliasses var d = Box2D.Dynamics, v = Box2D.Common.Math, s = Box2D.Collision.Shapes; var ball, gravity = n

我有一个小的Box2D东西(使用box2dweb.js),但是尽管将重力设置为(0,0),并且没有对任何对象施加力/脉冲,但当我开始绘制循环时,场景中唯一的动态形状会移动。我不知道为什么

有人知道为什么击球后“球”会移动吗

相关代码位为:

// shortcut aliasses
var d = Box2D.Dynamics,
    v = Box2D.Common.Math,
    s = Box2D.Collision.Shapes;

var ball,
    gravity = new v.b2Vec2(0,0);
    world = new d.b2World(gravity, true);

// setup the world box
var setupWorldBox = function(worldbox) {
  var fixDef = new d.b2FixtureDef;
  fixDef.density = 0;
  fixDef.friction = 0;
  fixDef.restitution = 0;

  var bodyDef = new d.b2BodyDef;
  bodyDef.type = d.b2Body.b2_staticBody;
  bodyDef.position.x = worldbox.width/2;
  bodyDef.position.y = worldbox.height/2;
  fixDef.shape = new s.b2PolygonShape;
  fixDef.shape.SetAsBox(worldbox.width/2, worldbox.height/2);
  world.CreateBody(bodyDef).CreateFixture(fixDef);
}

// draw loop
var drawFrame = function() {
   world.Step(1/60,10,10);
   world.ClearForces();
   ball.update(); // only updates the ball's DOM element position
   requestAnimFrame(drawFrame);
};

// start the game
function start() {
  var worldParent = document.querySelector("#world");
  setupWorldBox(worldParent.getBoundingClientRect());
  ball = new Ball(worldParent, document.querySelector(".ball"), d,v,s, world);
  drawFrame();
}
对于主体,定义“球”的代码如下:


据我所知,这两段代码都没有引入力,所以如果有人知道球的坐标为什么会改变,请告诉我,这样我就可以把它变成有用的东西,而不是令人困惑的东西=)

事实证明,我的代码创造了一个像游戏世界一样的实体,这意味着Box2D试图执行碰撞解析,因为“球”位于另一个实体对象内

解决方案(基于box2dweb API调用,但使用box2dweb API调用)如下:

// setup the world box
var setupWorldBox = function(worldbox) {
  var worldAABB = new Box2D.Collision.b2AABB;
  worldAABB.lowerBound.Set(0,0);
  worldAABB.upperBound.Set(worldbox.width, worldbox.height);
  var gravity = new b2Vec2(0, 0);
  var doSleep = true;
  var world = new b2World(worldAABB, gravity, doSleep);
  [....]
}
// setup the world box
var setupWorldBox = function(worldbox) {
  var worldAABB = new Box2D.Collision.b2AABB;
  worldAABB.lowerBound.Set(0,0);
  worldAABB.upperBound.Set(worldbox.width, worldbox.height);
  var gravity = new b2Vec2(0, 0);
  var doSleep = true;
  var world = new b2World(worldAABB, gravity, doSleep);
  [....]
}