我创建了一个 box2d 世界,我想限制世界的高度。我确实搜索了谷歌,显然在以前版本的 box2d 中有一个选项,你必须定义你的世界的大小,但我不确定你是否能够设置世界的高度,但在当前版本中他们有完全取消了该选项。
所以我只是在寻找一种限制高度的方法,因为我的球员是一个上下跳跃的球,我想限制它可以跳多高(跳跃是由物理和重力以及球的速度完成的,所以经过几次良好的跳跃后,随着速度的增加,球跳得非常高,我不想限制速度)并把边界放在让说y=900
。
我创建了一个 box2d 世界,我想限制世界的高度。我确实搜索了谷歌,显然在以前版本的 box2d 中有一个选项,你必须定义你的世界的大小,但我不确定你是否能够设置世界的高度,但在当前版本中他们有完全取消了该选项。
所以我只是在寻找一种限制高度的方法,因为我的球员是一个上下跳跃的球,我想限制它可以跳多高(跳跃是由物理和重力以及球的速度完成的,所以经过几次良好的跳跃后,随着速度的增加,球跳得非常高,我不想限制速度)并把边界放在让说y=900
。
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 方法)。