Box2D世界大小

3
我创建了一个box2d世界,并希望限制其高度。我在谷歌上搜索过,发现在之前的box2d版本中有一个选项,可以定义世界的大小,但我不确定是否能设置世界的高度,在当前版本中,他们完全取消了这个选项。 因此,我只是想寻找一种限制高度的方法,我的玩家是一个跳来跳去的球,我想限制它能够跳多高(跳跃是由物理和重力以及球的速度来完成的,所以在经历几次成功的跳跃后,随着速度的增加,球会跳得很高),并在y=900处放置边框。
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
6

Box2D世界的大小是无限的。你不能限制世界的大小,但是你可以创建一个形状,将Box2D世界中的某个区域包围起来。

下面介绍如何创建一个刚体和形状,使其环绕屏幕周围的区域,以便物体不会离开屏幕。通过更改角落坐标以适应您的需要,很容易调整此代码:

        // for the screenBorder body we'll need these values
        CGSize screenSize = [CCDirector sharedDirector].winSize;
        float widthInMeters = screenSize.width / PTM_RATIO;
        float heightInMeters = screenSize.height / PTM_RATIO;
        b2Vec2 lowerLeftCorner = b2Vec2(0, 0);
        b2Vec2 lowerRightCorner = b2Vec2(widthInMeters, 0);
        b2Vec2 upperLeftCorner = b2Vec2(0, heightInMeters);
        b2Vec2 upperRightCorner = b2Vec2(widthInMeters, heightInMeters);

        // static container body, with the collisions at screen borders
        b2BodyDef screenBorderDef;
        screenBorderDef.position.Set(0, 0);
        b2Body* screenBorderBody = world->CreateBody(&screenBorderDef);
        b2EdgeShape screenBorderShape;

        // Create fixtures for the four borders (the border shape is re-used)
        screenBorderShape.Set(lowerLeftCorner, lowerRightCorner);
        screenBorderBody->CreateFixture(&screenBorderShape, 0);
        screenBorderShape.Set(lowerRightCorner, upperRightCorner);
        screenBorderBody->CreateFixture(&screenBorderShape, 0);
        screenBorderShape.Set(upperRightCorner, upperLeftCorner);
        screenBorderBody->CreateFixture(&screenBorderShape, 0);
        screenBorderShape.Set(upperLeftCorner, lowerLeftCorner);
        screenBorderBody->CreateFixture(&screenBorderShape, 0);
注意:这段代码适用于Box2D v2.2.1版本。我假设你正在使用这个版本,因为你说“之前的版本”需要用SetAsEdge方法来编写代码。

谢谢,非常好用 :) ... 只有一个问题,为什么有些人会用米来表示宽度?我见过一些人这样做... - Ahoura Ghotbi
Box2D标准长度单位为米,但是在您的应用程序中“一米”有多长是由任何人定义的。因此需要使用PTM(像素到米)比率。 - CodeSmile
我喜欢你的回答,但我建议删除关于无限大小的第一句话。虽然Box2D世界没有明确的大小限制,但在任何可用意义上都不是无限的。模拟会在物体远离原点(0, 0)时退化,并受数字浮点表示的硬性限制。Box2D手册还在第1.7章和第13章中提到了限制。 - Louis Langholtz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,