我认为当你对一个物体施加力时,它被应用于物体的起源(可能是质心)。现在,我正在尝试创建类似俄罗斯方块的块,并通过应用这样的linearPulse使它们跳跃:
body.applyLinearImpulse(0, 5f, this.body.getPosition().x, this.body.getPosition().y, true);这是很好的工作,如果你只有一个盒子夹具作为身体,但当你创建多个夹具时,原点被错位,我不能把它放在夹具的中心。
下面是我的意思:

我用这样的矩阵创建固定装置:
int array[][]= {{0,0,0,0,0},
{0,0,1,0,0},
{0,1,1,1,0},
{0,0,0,0,0},
{0,0,0,0,0}};我使用数组来创建这样的装置:
public void setBody(int[][] blocks){
BodyDef def = new BodyDef();
def.type = BodyType.DynamicBody;
def.position.set(new Vector2(100 * WORLD_TO_BOX, 100 * WORLD_TO_BOX));
Body body = world.createBody(def);
body.setTransform(150*WORLD_TO_BOX, 200*WORLD_TO_BOX, -90*MathUtils.degreesToRadians);
for (int x = 0; x < 5; x++) { // HARDCODED 5
for (int y = 0; y < 5; y++) { // HARDCODED 5
if(blocks[x][y] == 1){
PolygonShape poly = new PolygonShape();
Vector2 v = new Vector2((-5/2+x),(-5/2+y));
poly.setAsBox(size/2 * WORLD_TO_BOX, size/2 * WORLD_TO_BOX, v, 0);
body.createFixture(poly, 1);
poly.dispose();
}
}
}
this.body = body;
}WORLD_TO_BOX值为0.032f,一个块的大小为32f
因此,我的看法是,我如何手动设置我的复杂多工装体的质量/起源中心?
发布于 2013-11-29 22:05:13
我不相信你能为一个物体设定质量中心,它是由系统计算的。从手册中:
您可以访问地方和世界坐标中的质量中心位置。Box2D中的许多内部模拟都使用质心。但是,您通常不需要访问它。相反,你通常会与身体转换一起工作。例如,你可能有一个正方形的身体。物体起源可能是正方形的一个角落,而质量中心位于正方形的中心。
const b2Vec2& GetPosition() const;
float32 GetAngle() const;
const b2Vec2& GetWorldCenter() const;
const b2Vec2& GetLocalCenter()我相信您将使用GetWorldCenter(),因为线性脉冲应用于世界坐标(也根据手册):
你可以在身体上施加力量、扭矩和冲动。当你施加一种力或一种冲力时,你提供了一个施加载荷的世界点。
这对我们有帮助吗?
https://stackoverflow.com/questions/20292749
复制相似问题