• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何更改 box2d 地面主体中地面夹具的边缘

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:06:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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



Best Answer-推荐答案


我发现它可以破坏当前的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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap