改变旋转中心box2d

时间:2011-02-13 11:10:01

标签: flash rotation polygon box2d

我有一个b2PolygonShape身体并向它施加一个力。

_recbody-> ApplyForce(b2Vec2(6.0,-6.0),_ recbody-> GetWorldCenter());

我想将身体的旋转中心更改为身体前方。 因此,applyForce和碰撞使得身体不会在中心转动,而是在前面更多。

2 个答案:

答案 0 :(得分:2)

我知道这是一个很老的帖子,但是从第一个答案构建,而不是使用SetAsBox(),你应该使用Set并定义框的顶点。我发现SetAtBox从中心创建,使用宽度和高度向所有4个边创建,所以无论你做什么,重心都将是形状的中心,但另一方面,如果你使用Set,即使你只是画一个盒子,你可以把它限制在一边。

例如:

int32 count = 4;
b2Vec2 vertices[] = {b2Vec2(sprite.contentSize.width/PTM_RATIO, 0.0f / PTM_RATIO),
b2Vec2(0.0f / PTM_RATIO,0.0f / PTM_RATIO),
b2Vec2(0.0f / PTM_RATIO, -sprite.contentSize.height/PTM_RATIO),
b2Vec2(sprite.contentSize.width/PTM_RATIO, -sprite.contentSize.height/PTM_RATIO),
  };
spriteShape.Set(vertices,count);

这将形成一个重心偏向左上角的形状,因为我们只画了右侧的多边形向下(没有超过[0,0]点)。

答案 1 :(得分:0)

this forum中找到了这个 “无论你在哪里创建实际形状,都会从bodyDef.position.Set()坐标设置一个body的质心。如果你将boxDef.SetAsBox()坐标偏移所需的数量,这应该得到你效力了。“