gpt4 book ai didi

ios - 如何更改 box2d 地面体中地面固定装置的边缘

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:44:48 24 4
gpt4 key购买 nike

在玩游戏的过程中,我希望能够改变 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 像素?我是否需要删除整个地面体并重新创建地面体和夹具,或者我是否可以只删除或修改现有的地面夹具?

最佳答案

我发现它可以破坏当前的 groundBody,然后创建一个新的 groundBody 和 ground fixture 工作正常。我不知道这是否最适合性能,但它的工作方式符合我的预期。

所以基本上,在游戏期间的适当时间,我会执行以下操作:

    world->DestroyBody(groundBody);

然后我重新执行上面问题陈述中显示的代码,将 verts 数组中的 20.0 像素值替换为 50.0 像素值,如下所示:

b2Vec2 verts[] = {
b2Vec2(-screenSize.width / 100.0, 50.0 / 100.0),
b2Vec2(screenSize.width / 100.0, 50.0 / 100.0)
}

关于ios - 如何更改 box2d 地面体中地面固定装置的边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com