在玩游戏的过程中,我希望能够改变 Box2D 世界中的地面边缘。我已经创建了一个地面主体,然后我在主体上添加了一个地面固定装置。例如,以下代码将在我的 Box2D 世界中创建一个高于屏幕底部 20 像素的平坦地面:
b2BodyDef groundBodyDef;
groundBodyDef.type = b2_staticBody;
groundBodyDef.position.Set(0, 0);
groundBody = world->CreateBody(&groundBodyDef);
b2PolygonShape groundShape;
b2FixtureDef groundFixtureDef;
groundFixtureDef.shape = &groundShape;
groundFixtureDef.density = 0.0;
CGSize screenSize = [CCDirector sharedDirector].winSize;
int num = 2;
b2Vec2 verts[] = {
b2Vec2(-screenSize.width / 100.0, 20.0 / 100.0),
b2Vec2(screenSize.width / 100.0, 20.0 / 100.0)
};
for(int i = 0; i < num - 1; ++i) {
b2Vec2 offset = b2Vec2(screenSize.width/2/PTM_RATIO,
20.0/2/PTM_RATIO);
b2Vec2 left = verts[i] + offset;
b2Vec2 right = verts[i+1] + offset;
groundShape.SetAsEdge(left, right);
groundBody->CreateFixture(&groundFixtureDef);
}
假设我需要更改 verts 数组以具有不同的地面夹具定义?例如,是否可以在玩家的移动之间动态地将地面抬高 50 像素?我是否需要删除整个地基体并重新创建地基体和夹具,或者我可以删除或修改现有的地基夹具?